我有一个有5个字段的Model。我在该模型上创建了一个ModelForm,现在我用包含4个字段的请求数据初始化表单。
请求数据中有4个字段的原因是前端的复选框在未选中时不会使用jquery FormData传递。
现在的问题是,如果没有在请求数据中传递复选框,我想在表单初始化时设置第5个字段的默认值。
最好的做法是在ModelForm或Form中设置默认值,或者使用Model中的默认值,或者我可以设置特定字段的值。
欢迎提出建议。蒂娅。
发布于 2021-07-02 16:44:20
在将request.POST绑定到表单之前,您可以随意修改它。如果你正在使用CBV FormView,你可以继承get_form_kwargs的子类。就像这样
# UNTESTED CODE
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
if self.request.method in ('POST', 'PUT'):
if 'foo' not in kwargs['data']:
#this starts as request.POST which is an immutable QueryDict
data = kwargs['data'].copy() # mutable copy
data['foo'] = 'whatever' #supply the missing default value
kwargs['data'] = data
return kwargs参考Django文档w.r.t。QueryDict。它们是像目录一样的棘手野兽,但它们之间的差异足以让您明白。可以很容易地在shell提示符下创建一个,并使用它来确保您得到正确的结果。
https://stackoverflow.com/questions/68219196
复制相似问题