为了清楚起见,我要求访问views.py
中的字段我希望在验证之前将额外的数据添加到表单中(因为它是必填字段),而stackexchange上的another answer似乎暗示我必须创建一个新表单来执行此操作。< / p>
现在我的代码看起来像这样:
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = TestForm(request.POST)
data = {}
for ---:
---add to data---
comp = Component.objects.get(name = path)
data['component'] = comp.id
form = TestForm(data)
if form.is_valid():
test = form.save(commit = 'false')
test.save()
return submitTest(request, var)
我怎么能用破折号填写零件?
答案 0 :(得分:0)
这是错误的做法。没有理由以编程方式添加必填字段;如果您已经知道该字段的值,则根本没有理由将其包含在表单中。
我不知道你要创建另一个表单是什么意思;相反,您应该在表单的Meta类中明确排除该字段,并在调用test
之前在test.save()
对象上设置值。
评论后编辑我仍然不明白为什么你有来自两个不同地方的数据,但也许你应该在传递给表单之前将它们合并:
data = request.POST.copy()
data['myvalue'] = 'myvalue'
form = MyForm(data)
答案 1 :(得分:0)
我弄清楚我做错了什么。在我的TestForm模型中,我没有包含'component'字段,因为我不希望它出现在表单上。因此,即使我正确地将表单数据插入到表单中,也会在表单验证期间清除“组件”数据。所以为了解决这个问题,我只是将“组件”添加到要显示的字段中,并将其隐藏在表单上我添加了这行
widgets = {'component': HiddenInput()}
到forms.py。
中的TestForm类