我在从formset访问表单数据时遇到问题。我附上了代码:
####FORM
class ActionTypeForm(forms.Form):
action_name = models.CharField(max_length=20)
description = models.CharField(max_length=250, blank=True, null=True)
####VIEW
dataset = request.POST
ActionTypeFormSet = formset_factory(ActionTypeForm)
formset = ActionTypeFormSet(dataset)
if formset.is_valid():
for form in formset.cleaned_data: #I ALSO TESETED formset.forms
customer.create_actiontype(form['action_name'], form['description'])
错误是我无法获得表单['action_name']。 formset.is_valid()返回True
异常类型:KeyError
异常值:'action_name'
form-0-action_name u'a'
form-2-description u'sadsa'
form-0-description u'a'
form-MAX_NUM_FORMS u''
form-1-description u'asd'
form-TOTAL_FORMS u'3'
form-1-action_name u'as'
form-INITIAL_FORMS u'0'
csrfmiddlewaretoken u'c4fa9ddb4ec69ac639d7801eb14979f2'
form-2-action_name u'asda'
答案 0 :(得分:2)
主要问题是你有一张空白表格。您正在使用表单类定义中的模型字段,django的表单框架不知道如何处理。 Django模型!= django形式。
formset正在验证并返回空表单,当然这些表单没有表单字段。
您应该使用有效的表单字段从表单中创建Formset
,或者从ModelFormset
中创建Model
。
cleaned_data
,但我猜他们会返回所有表单的cleaning_datas列表,这意味着您的代码问题就在上面。 答案 1 :(得分:0)
formset在self.forms
中存储它所有关联的表单,迭代它将为表单返回一个迭代器iter(self.forms)
。
您的POST
数据看起来不错,所以这就是您可以使用它的方法:
if formset.is_valid():
for form in formset:
customer.create_actiontype(form.action_name, form.description)