【问题标题】:Is there a way to have a field that only the superuser can add/edit?有没有办法拥有一个只有超级用户才能添加/编辑的字段?
【发布时间】:2018-04-04 20:42:44
【问题描述】:
有没有办法拥有一个只有超级用户才能添加/编辑的字段?
class ProductPage(Page):
price = models.IntegerField(blank=True)
description = RichTextField(blank=True)
featured = models.BooleanField(default=False)
以上是我的模型的一部分,但我只希望超级用户访问特色字段。
【问题讨论】:
标签:
django
django-models
django-admin
wagtail
【解决方案1】:
我假设您的意思是只有登录 Django 管理站点的超级用户才能编辑 featured 字段。如果您想限制对自己的表单和视图的访问,您只需要检查用户的状态并相应地自定义表单/视图。以下是您可以在 admin.py 中的ModelAdmin 中执行的操作:
def get_readonly_fields(self, request):
fields = super().get_readonly_fields(request)
if not request.user.is_superuser:
fields.append('featured')
return fields
【解决方案2】:
我尝试了@dirkgroten 提供的解决方案,但必须进行一些更改才能使其正常工作。
根据 Django >2.1 版本的Django Documentation,get_readonly_fields 采用 3 个参数。
此外,字段需要设置一个要追加的列表,因为它默认创建一个元组。
def get_readonly_fields(self, request, obj=None):
fields = list(super().get_readonly_fields(request))
if not request.user.is_superuser:
fields.append('featured')
return fields