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

aam*_*iri 3 python django readonly django-forms django-admin

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

class DateTimeRef(models.Model):
    start = models.DateTimeField(editable=False, db_index=True)
Run Code Online (Sandbox Code Playgroud)

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

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

    class Meta:
        model = models.DayPart


class DateTimeRefAdmin(admin.ModelAdmin):
    form = DateTimeRefForm
    list_display = ['start']
Run Code Online (Sandbox Code Playgroud)

这将为我提供一个用于日期时间字段的简单文本输入: 在此输入图像描述

该管理员的用户不一定有技术倾向。我想让他们更容易地创建这些对象。可编辑的日期时间字段使这个时髦的小部件开箱即用:

在此输入图像描述

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

更新

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

jjc*_*jjc 5

我是这个领域的新手,但是我面前的代码有以下习惯用法admin.py

class ThingAdmin(admin.ModelAdmin):

    def get_readonly_fields(self, request, obj=None):
        if obj:
            return ('start',)
        else:
            return ()
Run Code Online (Sandbox Code Playgroud)

在我的示例中,这具有在创建新对象时使其可编辑的效果,但在查看旧对象时则不可编辑。