如何在Django中访问ModelForm的字段名称?

时间:2016-07-22 15:54:51

标签: python django python-2.7 django-forms

为了清楚起见,我要求访问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)

我怎么能用破折号填写零件?

2 个答案:

答案 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类