Django 管理员:使用“editable=False”编辑模型字段
Posted
技术标签:
【中文标题】Django 管理员:使用“editable=False”编辑模型字段【英文标题】:Django admin: Edit model field with 'editable=False' 【发布时间】:2012-07-18 14:21:10 【问题描述】:我希望管理员能够编辑普通用户无法编辑的字段。例如作者或订阅者等。
我试过这个:Django admin: How to display a field that is marked as editable=False' in the model?
(答案中给出的可编辑部分)
但该字段仍然无法出现在管理页面上。
这里有一些信息供参考:
#models.py
class MyModel(models.Model):
myfield = models.ManyToManyField(User, blank=True, editable=False)
#admin.py
class MyModelAdminForm(forms.ModelForm):
myfield = models.ManyToManyField(User, blank=True, editable=True)
class Meta(object):
model = MyModel
class MyModelAdmin(admin.ModelAdmin):
form = MyModelAdminForm
admin.site.register(MyModel, MyModelAdmin)
如果我将模型更改为状态 editable=True,那么我会在我的管理页面上看到该字段。 (如预期)
我正在使用 Django 1.3、Python 2.6
【问题讨论】:
这种类型的字段不需要用于此目的。它需要保存系统创建的数据,如my_field = models.DateTimeField(auto_now_add=True, editable=False)
。您可以为 MyModelAdmin
创建规则,其中 check 是用户 superadmin 或只是用户并显示另一个字段列表。
也许这可以帮助你Hide certain fields in Django admin site for different user
@b1- 想想你是对的。 editable=False 字段只能用于在表单之外设置的字段。因为我坚持要在表单中显示该字段,所以这是错误的参数。 exclude list 是更好的选择。
@b1 在自动化测试(又名单元测试)中编辑这些字段怎么样?
@Buttons840 有什么用?更好地检查测试:模型是否自动保存在字段中的正确值?
【参考方案1】:
您应该通过权限来处理这个用例:只有拥有模型更改权限的用户才能真正更改它。这些权限默认存在于 Django 中。您只需要在显示表单之前检查它们。
它们还可以用于更精细的控制,例如仅显示某些字段。但该逻辑必须由您在视图和模板中实现。
看看:https://docs.djangoproject.com/en/1.11/topics/auth/default/#default-permissions
如果您仍需要编辑不可编辑的字段,请查看:https://***.com/a/44720169/621690
【讨论】:
以上是关于Django 管理员:使用“editable=False”编辑模型字段的主要内容,如果未能解决你的问题,请参考以下文章
Django后端开发学习笔记使用Models并在Django自带管理页面中管理数据