web-dev-qa-db-ja.com

Django admin:モデルでeditable = False 'とマークされているフィールドを表示する方法は?

モデルでフィールドが'editable=False'としてマークされていても、管理ページに表示したいのですが。現在、フィールドを完全に非表示にしています。これをどのように実現できますか?

87
GabiMe

読み取り専用フィールド を使用します。同様に(Django> = 1.2)の場合):

class MyModelAdmin(admin.ModelAdmin):
    readonly_fields=('first',)
178
tback

更新

このソリューションは、Adminでフィールドを編集可能に保ちたいが、他の場所では編集できないようにしたい場合に役立ちます。フィールドを編集不可throughoutにしたい場合は、@ Till Backhaus ' answer がより良いオプションです。

元の回答

これを行う1つの方法は、adminでカスタムModelFormを使用することです。このフォームは、必須フィールドをオーバーライドして編集可能にすることができます。これにより、editable=False管理者以外のすべての場所。例えば(Django 1.2.3)でテスト済み)

# models.py
class FooModel(models.Model):
    first = models.CharField(max_length = 255, editable = False)
    second  = models.CharField(max_length = 255)

    def __unicode__(self):
        return "{0} {1}".format(self.first, self.second)

# admin.py
class CustomFooForm(forms.ModelForm):
    first = forms.CharField()

    class Meta:
        model = FooModel
        fields = ('second',)

class FooAdmin(admin.ModelAdmin):
    form = CustomFooForm

admin.site.register(FooModel, FooAdmin)
16
Manoj Govindan

読み取り専用フィールドは、次のフィールドにも含まれている必要があります。

fields = ['title', 'author', 'content', 'published_date', 'updated_date', 'created_date']
readonly_fields = ('published_date', 'updated_date', 'created_date')
0
gabriel