Gab*_*iMe 89 django django-admin
即使字段标记为'editable=False'
模型,我希望管理页面显示它.目前它完全隐藏了这个领域..如何实现这一目标?
tba*_*ack 180
使用只读字段.像这样(对于django> = 1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
Run Code Online (Sandbox Code Playgroud)
Man*_*dan 16
更新
如果您希望在Admin中保持字段可编辑但在其他任何位置不可编辑,则此解决方案非常有用.如果你想让整个领域不可编辑,那么@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)
Run Code Online (Sandbox Code Playgroud)
小智 7
您的只读字段也必须在以下字段中:
fields = ['title', 'author', 'content', 'published_date', 'updated_date', 'created_date']
readonly_fields = ('published_date', 'updated_date', 'created_date')
Run Code Online (Sandbox Code Playgroud)
小智 5
editable=False
您还可以按照模型中的方式设置只读字段(editable
此处为 django 文档参考)。然后在管理中重写该get_readonly_fields
方法。
# models.py
class MyModel(models.Model):
first = models.CharField(max_length=255, editable=False)
# admin.py
class MyModelAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
return [f.name for f in obj._meta.fields if not f.editable]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38521 次 |
最近记录: |