2011-02-16 97 views
3

我們正在使用django開發客戶管理應用程序,我們需要爲代理設置權限,無論他/她是否可以編輯客戶的屬性()。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) 

這部作品正是這樣,我想:對於不允許的領域,將它們設置爲只讀...

再次感謝,

回答

3

這是可能的...您必須使用django管理方法as they described in here ...您必須定義add_view,change_view和changelist_view函數...

您還必須找到一種將用戶分組的方法(組可能是一種好方法,或者您可以使用權限)。我創建一個擴展用戶模型的模型,但你可以找到自己的路......

第二次寫入基本的添加,修改和ListView founctions,如:

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管理域顯示方法...