【问题标题】:django admin permissions to modify model's attributesdjango admin 权限修改模型的属性
【发布时间】:2011-02-16 20:49:30
【问题描述】:

我们正在使用 django 开发一个客户管理应用程序,我们需要为代理设置权限,他/她是否可以编辑客户的属性()。

例如,

如果我有模型:

class Customer(models.Model):
    # basic information
    name = models.CharField(max_length=150) # the name of this customer
    date = models.DateField(auto_now_add=True) # the date that this customer is created

    # personal information
    citizen_id = models.BigIntegerField(blank=True)
    phone = models.BigIntegerField(max_length=20, blank=True)
    work = models.CharField(max_length=100, blank=True)
    address = models.CharField(max_length=300, blank=True)
    bank_card = models.BigIntegerField()

    # installation detail 
    primary = models.IntegerField(default=0)
    secondary = models.IntegerField(default=0)
    region = models.ForeignKey(Region) # the region that this customer currently lives in
    type = models.ForeignKey(Type) # the installation type
    group = models.ForeignKey(Group)

    STATUS_CHOICES = (
                  ('Active', 'Active'),
                  ('Inactive', 'Inactive'),
                  ('Transfered', 'Transfered'),
                  ('Closed', 'Closed'),
                  ('Suspended', 'Suspended'),
                  ('Cancelled', 'Cancelled'),
                  )

    status = models.CharField(max_length=40, choices=STATUS_CHOICES)

我希望能够设置编辑某些字段的权限,但是当前的权限系统只允许您添加/更改/删除模型实例,其中“更改”允许用户编辑所有属性在那个模型中,这不是我们真正想要的。

用户A可以编辑电话、地址、工作和citizen_id 用户 B 只能编辑电话和地址, 用户 C 可以编辑citizen_id,...... 等等……

我希望能够设置不同的权限

有可能做到这一点吗?如果我可以使用 django 管理系统来管理代理和客户,那将非常有帮助。

======================== 非常感谢 FallenAngel 的回复。

我认为这正是我们想要的。

这是我试过的,

在 admin.py 中

class CustomerAdmin(admin.ModelAdmin):
    def change_view(self, request, object_id, extra_context=None):
        agent = Agent.object.get(user=request.user)
        permitted_fields = agent.permitted_fields # assume i have this setup...
        self.readonly_fields = get_not_permitted_fields(premitted_fields) # assume I have this function written somewhere
        return super(CustomerAdmin, self).change_view(request, object_id,
            extra_context=None) 

这正是我想要的方式:对于不允许的字段,将它们设置为只读...

再次感谢,

【问题讨论】:

    标签: django-admin django-permissions


    【解决方案1】:

    这是可能的...您必须使用 django 管理方法as they described in here...您必须定义 add_view、change_view 和 changelist_view 函数...

    您还必须找到一种方法来对用户进行分组(组可能是一种好方法,或者您可以使用权限)。我创建了一个扩展 User 模型的模型,但是您可以找到自己的方式...

    第二次编写基本的添加、更改和列表视图功能,如:

    class CustomerAdmin(admin.ModelAdmin):
        list_display= ["fields that will be used for all users"]
    
        def changelist_view(self, request, extra_context=None):
            if request.user == "type a":
                self.list_display.extend["list of other fields"]
            return super(CustomerAdmin, self).changelist_view(request, extra_context)
    

    您必须指定添加、更改(和更改列表,如果需要)视图并处理每种用户类型。然后 Django 将为用户显示相关字段。你扩展 list_display、fileds、exclude、list_filter 等 django 管理字段显示方法...

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2014-02-22
      • 2019-03-24
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多