【问题标题】:Django admin: Edit model field with 'editable=False'Django 管理员:使用“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 或只是用户并显示另一个字段列表。
  • @b1- 想想你是对的。 editable=False 字段只能用于在表单之外设置的字段。因为我坚持要在表单中显示该字段,所以这是错误的参数。 exclude list 是更好的选择。
  • @b1 在自动化测试(又名单元测试)中编辑这些字段怎么样?
  • @Buttons840 有什么用?更好地检查测试:模型是否自动保存在字段中的正确值?

标签: django django-forms django-admin


【解决方案1】:

您应该通过权限来处理这个用例:只有拥有模型更改权限的用户才能真正更改它。这些权限默认存在于 Django 中。您只需要在显示表单之前检查它们。

它们还可以用于更精细的控制,例如仅显示某些字段。但该逻辑必须由您在视图和模板中实现。

看看:https://docs.djangoproject.com/en/1.11/topics/auth/default/#default-permissions

如果您仍需要编辑不可编辑的字段,请查看:https://stackoverflow.com/a/44720169/621690

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 2015-02-25
    • 2016-12-23
    • 1970-01-01
    • 2014-12-01
    • 2014-10-15
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多