2016-08-24 35 views
0

我嘗試用只讀字段的東西在Django 1.8.7,讓說我有類似下面的一些代碼:Django的1.8.7 get_readonly_fields好像有一個bug

class MyAdmin(admin.ModelAdmin): 
    readonly_fields = ('a', 'b') 

    def get_readonly_fields(self, request, obj=None): 
     if not request.user.is_superuser: 
      self.readonly_fields += ('c') 
     return super(MyAdmin, self).get_readonly_fields(request, obj) 

首先我用超級管理員和訪問密碼該管理頁面change_form,

該代碼運行良好,然後我與工作人員用戶登錄,然後仍然運行良好,再次,我嘗試使用superadmin登錄,但只讀字段呈現爲非superadmin用戶,

再次清除瀏覽器緩存,再次嘗試使用s uper admin,但仍然無法正常工作。我嘗試重新啓動服務器,然後它正常工作,直到我重複上面的步驟,這個奇怪的事情再次出現。

任何人都知道爲什麼會發生這種情況?我認爲這看起來像一些錯誤,但不確定。

在此先感謝。

回答

1

該錯誤不在Django中,而是在您的代碼中。在你的get_readonly_fields方法中你修改readonly_fields屬性;這些修改仍然存在,因爲管理對象在進程的整個生命週期內都存在。

不要這樣做。 get_readonly_fields應該返回一個值,而不是修改該屬性。只要做:

def get_readonly_fields(self, request, obj=None): 
    rfo = super(MyAdmin, self).get_readonly_fields(request, obj) 
    if not request.user.is_superuser: 
     rfo += ('c') 
    return rfo 
+0

好的答案!非常感謝。我不知道我的代碼是否有問題,然後你證明它。感謝您對此的描述。 – Dev1410

相關問題