2012-08-03 58 views
0

我的日期字段是editable=False在django中顯示帶有editable = False的DateTimeField admin

該字段在創建時填入datetime.now()

由於管理員不會顯示editable=False字段,我創建了一個自定義管理員。

自定義管理使用表單與此字段:

date = forms.DateTimeField(widget=widgets.AdminSplitDateTime, required=False) 

我想實現的是:

  1. 用戶將不能夠觸及這一領域(因此,editable=False
  2. 管理員將能夠更改字段的值,但不會被迫(這就是爲什麼我有required=False
  3. 管理員將能夠看到該字段的當前值。

我未能實現(3)。我創建了一個條目,當我查看數據庫時,我發現它有一個有效的日期。但是當我從管理面板打開它時,日期小部件是空的。

任何想法如何使日期小部件顯示該字段的當前值?

回答

2

首先,models.DateTimeField在管理員中默認使用widgets.AdminSplitDateTime,您不必明確指定它。

對於普通員工,請使用readonly_fields來防止更改日期字段。

對於管理員,呈現不同的更改表單以允許修改日期字段。在Django 1.4中,可以通過覆蓋ModelAdmin.get_readonly_fields()輕鬆完成:

class YourModelAdmin(admin.ModelAdmin): 
    def get_readonly_fields(self, request, obj=None): 
     # we don't use self.readonly_fields anymore 
     if request.user.is_superuser: 
      return() 
     return ['date'] 
相關問題