webdevqa.jp.net

Django管理者の主キーを編集/表示

Djangoは、主キーのフラグが付けられたフィールドがDjango管理インターフェースで表示/編集されないようにします。

主キーを指定したい場合としたくない場合があるデータを入力したいとします。管理インターフェースに主キーを表示するにはどうすればよいですか?また、それをオプションとして指定するにはどうすればよいですか?

33
emcee

また、Django admin内の 'id'(主キー)を表示したかったのですが、必ずしも編集する必要はありません。readonly_fieldsリストに追加しただけで、表示されました。 IE:

class StudentEnrollmentInline(admin.TabularInline):
    model = Enrollment
    readonly_fields=('id',)

一方、「フィールド」リストに追加しようとすると、Djangoは、フィールドが存在しないと言って私に腹を立てました...

36
thespacecamel

モデルで主キーフィールドを明示的に指定すると(primary_key=Trueを使用)、管理者で編集できるようになります。

Django ./manage.py syncdbを介して作成されたモデルの場合、次の主キーフィールドが自動的に追加されます。

id = models.AutoField(primary_key=True)

それをIntegerField主キーとしてモデルに明示的に変更(または追加)すると、adminを使用して直接編集できるようになります。

id = models.IntegerField(primary_key=True)

しかし、他の人が指摘したように、これは潜在的な地雷原です...

12
Haes

Djangoのドキュメント には、それについての短い文がありますが、これは明確ではありません。

フィールドもフィールドセットオプションも存在しない場合、Djangoは、デフォルトで、AutoFieldではなく、すべてのフィールドセットで、フィールドと同じ順序でeditable = Trueを持つ各フィールドを表示します。モデルで定義されています。

理由は、Django AutoFieldを編集することを許可していません(これは自動インクリメント値であり、編集すべきではないため、これは正しいことです)。 @ mnelson4の答えは、それを表示するための良いアプローチです。

1
FallenAngel

データベースでデフォルトで「id」の列名を持つ主キーを表示するには、「pk」を使用します

def __str__(self):
    return '{} - {} ({})'.format(self.pk, self.name, self.pcode)
1
mgrollins

オプションの主キーを持つことは意味がありません。 PKは自動インクリメントである場合(編集する必要はありません)、または手動で指定する場合(この場合は常に必要です)のいずれかです。

なぜこれが必要なのですか?

1
Daniel Roseman

投票数が最も多い回答 私にはうまくいきませんでした。ゲッターが必要でした。

class StudentEnrollmentInline(admin.TabularInline):
    model = Enrollment
    readonly_fields=('student_enrollment_id',)

    def student_enrollment_id(self, obj):
        return obj.id

Django 1.11を使用する

1
Frank Henard