1
試圖在django中實例化一個模型表單,我傳入一個實例並得到驗證錯誤,儘管數據是從前幾分鐘輸入的。忽略額外的字段,我試圖刪除它,問題依然存在。它從單獨的鍵值表中添加額外的字段。Django模型表單錯誤實例模型
的Django 1.3版
def edit(request,company_uuid,contact_uuid,address_uuid):
mcompany = get_object_or_404(models.Company, uuid = company_uuid)
extra_questions, extra_ids = get_questions(request, 2)
if request.method == 'POST': # If the form has been submitted...
form = forms.EditCompanyForm(request.POST,instance=mcompany, extra=extra_questions, extra_ids=extra_ids)
if form.is_valid():
fModel = form.save(commit = False)
for (question, answer) in form.extra_answers():
save_answer(request, question, answer, mcompany.uuid, 2)
form.save()
url = reverse('contacts_details',kwargs={'company_uuid':mcompany.uuid,
'address_uuid':address_uuid,
'contact_uuid':contact_uuid})
return HttpResponseRedirect(url)
else:
form = forms.EditCompanyForm(request.POST,instance=mcompany, extra=extra_questions, extra_ids=extra_ids)
return share.output_page(request,'contacts/edit.html',{'form': form,
'company_uuid':mcompany.uuid,
'address_uuid':address_uuid,
'contact_uuid':contact_uuid})
class EditCompanyForm(jsforms.JMSModelForm):
"""
The Company form with the contacts fields included
"""
name = forms.CharField(label = _('Company Name'),widget = forms.TextInput(attrs={'class':'large-input-box'}))
discount=forms.FloatField(widget = jsforms.StandardUnit("PC"),required=False)
allow_download = forms.BooleanField(required=False,label=_('Allow download'))
def __init__(self, *args, **kwargs):
extra = kwargs.pop('extra')
extra_id = kwargs.pop('extra_ids')
super(EditCompanyForm, self).__init__(*args, **kwargs)
for i, question in enumerate(extra):
settings = ExtraFieldSetup.objects.get(uuid=extra_id[i])
if settings.type == 2:
list = []
list_partial = str(settings.extra).split(':')
for choice in list_partial:
x = choice, choice
list.append(x)
self.fields['custom_%s' % i] = forms.ChoiceField(choices=list, label=question, required=False)
else:
self.fields['custom_%s' % i] = forms.CharField(label=question, required=False)
def extra_answers(self):
for name, value in self.cleaned_data.items():
if name.startswith('custom_'):
yield (self.fields[name].label, value)
class Meta:
model = models.Company
exclude = ('company', 'otherdetails', 'jms_code', 'logo', 'hidden', 'user')
您先生是個傳奇人物,比我們整個開發團隊的眼睛好>。< – Jharwood