【问题标题】: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 Documentationget_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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-20
        • 1970-01-01
        相关资源
        最近更新 更多