Django admin: 如何在模型中显示标记为“editable=False”的字段?
即使在模型中一个字段被标记为 'editable=False'
,我还是希望在管理页面上显示这个字段。目前,它完全隐藏了这个字段。怎么才能做到这一点呢?
7 个回答
14
在你的管理页面上添加你想要显示的字段。
然后添加你希望设置为只读的字段。
你的只读字段也必须包含在 fields
里面。
class MyModelAdmin(admin.ModelAdmin):
fields = ['title', 'author', 'published_date', 'updated_date', 'created_date']
readonly_fields = ('updated_date', 'created_date')
19
更新
这个解决方案适合你想在管理后台保持某个字段可编辑,但在其他地方不让编辑的情况。如果你想让这个字段在所有地方都不可编辑,那么@Till Backhaus的回答会更合适。
原始回答
实现这个功能的一种方法是使用自定义的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)
257
使用 只读字段。像这样(适用于django版本大于等于1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)