0

我有日期字段editable=False

datetime.now()该字段在创建时填充。

由于管理员不会显示editable=False字段,我创建了一个自定义管理员。

自定义管理员使用带有此字段的表单:

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

我想要实现的是:

  1. 用户将无法触摸此字段(因此,editable=False
  2. 管理员将能够更改字段的值,但不会被迫(这就是为什么我有required=False
  3. 管理员将能够看到该字段的当前值。

我没有达到(3)。我创建了一个条目,当我查看数据库时,我发现它有一个有效的日期。但是当我从管理面板打开它时,日期小部件是空的。

任何想法如何使日期小部件显示字段的当前值?

4

1 回答 1

2

首先,在 Admin 中默认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']
于 2012-08-04T05:41:21.897 回答