2014-10-06 30 views
0

我有一個條件,我希望阻止編輯我的應用程序中某些Django模型中輸入的任何記錄。同時我希望允許相同的添加權限,並且允許查看模型的現有記錄。我知道ModelAdmin中的readonly_fields選項。但我正在尋找一個通用選項,以便它可以繼承一些模型。如何防止在Django模型中編輯任何輸入的記錄

class ReadOnlyAdmin(admin.ModelAdmin): 
    readonly_fields = [] 
    def get_readonly_fields(self, request, obj=None): 
      return list(self.readonly_fields) + \ 
       [field.name for field in obj._meta.fields] 

    def has_add_permission(self, request, obj=None): 
      return True #False originally 

    def has_delete_permission(self, request, obj=None): 
     return False 

class CompanyAdmin(ReadOnlyAdmin): 
    list_display = ('name','website') 

的錯誤,如果返回true爲has_add_permission:

AttributeError at /admin/tracker/company/add/ 

'NoneType' object has no attribute '_meta' 

Request Method: GET Request URL: 

http://myhost:8000/admin/tracker/company/add/ Django Version: 

1.6.5 Exception Type: AttributeError Exception Value: 

'NoneType' object has no attribute '_meta' 

回答

0

我想重寫只讀方式是顯而易見的路線:

class ReadOnlyAdmin(admin.ModelAdmin): 
    def get_readonly_fields(self, request, obj=None): 
     # your logic 

class YourAdmin(ReadOnlyAdmin): 
    pass 
+0

嘗試過這種方法,但它會在添加新記錄時產生問題。如果你知道如何通過這個邏輯來允許添加許可,我會很樂意實現它! – user956424 2014-10-06 11:31:30

+0

您可以將該錯誤添加到原始問題中,因爲它可能是要解決的問題 – 2014-10-06 11:32:40

+0

抱歉!編輯過你的答案。現在我已經更新了我原來的帖子! – user956424 2014-10-06 11:59:54

相關問題