Django-admin:在渲染前更改更改表单中的字段值

1 投票
1 回答
5371 浏览
提问于 2025-04-17 12:12

在自定义视图中,有一个链接指向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”的值。

这是经过测试的小技巧

撰写回答