Django admin,使用DateTime小部件在创建时设置不可编辑的日期字段

时间:2013-11-06 20:41:34

标签: python django django-forms django-admin readonly

我有一个非常简单的模型定义如下:

class DateTimeRef(models.Model):
    start = models.DateTimeField(editable=False, db_index=True)

我想允许通过Django Admin创建这些字段。因为该字段是不可编辑的,所以我读过我需要这样做:

class DateTimeRefForm(forms.ModelForm):
    start = forms.DateTimeField()

    class Meta:
        model = models.DayPart


class DateTimeRefAdmin(admin.ModelAdmin):
    form = DateTimeRefForm
    list_display = ['start']

这将为我提供一个简单的文本输入,用于datetime字段: enter image description here

此管理员的用户不一定具有技术倾向。我想让他们更容易创建这些对象。 DateTime字段是可编辑的,可以开箱即用这个时髦的小部件:

enter image description here

无论如何,我可以让我的不可编辑字段在管理站点中使用此表单小部件吗?

更新

澄清一下:我希望能够在创建记录时通过Django管理员设置此字段。我不希望该字段可以以任何其他方式编辑。

2 个答案:

答案 0 :(得分:4)

我是这方面的新手,但我面前的代码在admin.py中有以下习语:

class ThingAdmin(admin.ModelAdmin):

    def get_readonly_fields(self, request, obj=None):
        if obj:
            return ('start',)
        else:
            return ()

在我的示例中,这样可以在创建新对象时将其保留为可编辑状态,但在查看旧对象时则不会。

答案 1 :(得分:0)

我就是这样做的。

'model.py'中的

class Thing(models.Model):
    #field 1
    .....
    date = models.DateTimeField(auto_now_add=True)
admin.py中的

class ThingAdmin(admin.ModelAdmin):
    list_display = (....., 'date')