如何为只读字段设置初始值

How to set initial value for read only field

我有一个 Django 应用程序正在使用 django.contrib.admin 进行管理任务。

对于一个模型,我现在需要添加一个字段来指示每一行是从代码的哪一部分创建的。我正在使用 readonly_fields 来防止通过管理界面更改此值。

此字段中的默认值会告诉我该行是

但我需要比这更好的粒度。特别是我希望能够区分由不知道该字段的代码创建的行和通过管理界面创建的行。

我的 ModelAdmin class 有什么方法可以为 readonly_fields 中提到的字段指定初始值吗?

我找到了这个似乎有效的解决方案:

class Admin(ModelAdmin):
    readonly_fields = ('created_by',)
    def save_form(self, request, form, change):
        r = super(Admin, self).save_form(request, form, change)
        if not change:
            assert r.created_by == CREATED_BY_UNKNOWN
            r.created_by = CREATED_BY_ADMIN
        return r

CREATED_BY_UNKNOWNCREATED_BY_ADMIN 是我代码中别处定义的值。

一种方法是,

def get_form(self, request, caja=None, **kwargs):
    self.form = YourModelForm

    form = super(YourModelAdmin, self).get_form(request, caja, **kwargs)
    form.base_fields['field'].initial = your_initial_data
    return form