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 Admin后台管理模块的使用

Django后端开发学习笔记使用Models并在Django自带管理页面中管理数据

Django后端开发学习笔记使用Models并在Django自带管理页面中管理数据

Django:admin管理工具的使用

Django:在管理界面中使用 TinyMCE 4

如何在Django管理员中制作单选按钮