Django-admin:在渲染前更改更改表单中的字段值
在自定义视图中,有一个链接指向Django-admin的某个模型实例的修改表单。我们的目标是在表单渲染之前,先修改一些表单字段的值,就像在添加表单时可以通过在URL中添加参数(ModelFieldName=value)来预填充字段一样。那么,如何在渲染之前修改修改表单中的字段值呢?也许我需要创建一个自己的ModelForm,在里面修改字段的值,然后把它赋值给ModelAdmin的表单变量?如果是这样的话,怎么才能修改ModelForm字段的值呢?
1 个回答
1
我刚发现,ModelAdmin.add_view这个方法在django/contrib/admin/options.py的第900行使用了request.GET来设置初始值。
所以,如果你想在someapp.somemodel的添加表单中预先填充“name”字段为'bar',只需打开这个链接:/admin/someapp/somemodel/add/?name=bar
如果你想在修改表单中实现类似的功能,可以像下面这样重写get_object方法:
def get_object(self, request, object_id):
obj = super(YourModelAdmin, self).get_object(request, object_id)
for key, value in request.GET.items():
setattr(obj, key, value)
return obj
然后打开这个链接:/admin/someapp/somemodel/1/?name=bar,表单中的“name”字段就会显示“bar”的值。
这是经过测试的小技巧。