如何为只读字段设置初始值
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_UNKNOWN
和 CREATED_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
我有一个 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_UNKNOWN
和 CREATED_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