0

IntegrityErrorモデルを DB に保存しようとするとエラーが発生します

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 = vdone メソッドの行を変更したsetattr(new,k,v)ところ、うまくいきました。何が違うのかわからない…

4

2 に答える 2

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('/')
于 2012-11-16T13:56:12.310 に答える
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('/')
于 2012-05-09T16:42:45.403 に答える