我在尝试将模型保存到数据库时收到IntegrityError
def done(self, form_list, **kwargs):
new = Business()
new.user = self.request.user
for form in form_list:
for k,v in form.cleaned_data.iteritems():
new.k = v
new.save()
return redirect('/')
错误说明:(1048, "Column 'category_id' cannot be null")
正在填写的表格并具有类别模型:
class AddForm2(forms.Form):
category = forms.ModelChoiceField(queryset = Category.objects.filter(children__isnull=True))
city = forms.ModelChoiceField(queryset = City.objects.all())
name = forms.CharField(max_length = 200, label="Business Name")
address = forms.CharField(max_length = 200, label="Street Address")
slogan = forms.CharField(max_length=140)
phone = forms.CharField(max_length=10)
website = forms.URLField()
email = forms.EmailField()
models.py中的业务
class Business(models.Model):
TYPE_CHOICES = (
('1','Basic'),
('2','Silver'),
('3','Platinum'))
user = models.OneToOneField(User)
ad_type = models.CharField(choices = TYPE_CHOICES, default = '1', max_length=1)
name = models.CharField(max_length=200)
slug = models.SlugField()
address = models.CharField(max_length=200)
slogan = models.CharField(max_length=140, blank=True)
description = models.TextField()
phone = models.CharField(max_length=10)
website = models.URLField(blank=True)
email = models.EmailField()
twitter = models.CharField(max_length=100, blank=True)
facebook = models.URLField(blank=True)
category = models.ForeignKey(Category)
city = models.ForeignKey(City)
编辑:
我在完成的方法中更改了new.k = v
的行setattr(new,k,v)
并且它有效。不确定有什么不同......
答案 0 :(得分:0)
done()函数应该改为使用setattr:
def done(self, form_list, **kwargs):
new = Business()
new.user = self.request.user
for form in form_list:
for k,v in form.cleaned_data.iteritems():
setattr(new, k, v)
new.save()
return redirect('/')
答案 1 :(得分:0)
在深入研究django.forms.models
之后,我建议使用方便的construct_instance
方法将多个表单中的数据保存到单个实例中:
from django.contrib.formtools.wizard.views import SessionWizardView
from django.forms.models import construct_instance
class YourFormWizard(SessionWizardView):
def done(self, form_list, **kwargs):
new = Business()
new.user = self.request.user
for form in form_list:
new = construct_instance(form, new, form._meta.fields, form._meta.exclude)
new.save()
return redirect('/')