Django多表格保存

时间:2013-05-12 19:51:02

标签: django django-forms

我已经尝试了几乎所有我能找到的关于此的内容,但我很确定我只是一个小小的建议,而不是解决我的问题。

我正在尝试保存到我使用Django的表单方法同时生成的表单。这些表单具有ForeignKey关系。

我的模特:

class Publisher(models.Model):
    company = models.CharField(max_length=255)
    address1 = models.CharField(max_length=255)
    address2 = models.CharField(max_length=255)
    city = models.CharField(max_length=255)
    zipcode = models.CharField(max_length=10)
    email = models.EmailField(max_length=255)
    firstname = models.CharField(max_length=255)
    lastname = models.CharField(max_length=255)
    tc = models.BooleanField()
    timestamp = models.DateTimeField(auto_now=True)
    def __unicode__(self):
        return self.company

class PublisherQuestions(models.Model):
    referal = models.TextField()
    updates = models.BooleanField()
    publisher = models.ForeignKey(Publisher)
    preferredCommunication = models.ForeignKey(PublisherCommunication)
    def __unicode__(self):
        return self.publisher

class PublisherForm(ModelForm):
    class Meta:
        model = Publisher


class PublisherQuestionsForm(ModelForm):
    class Meta:
        model = PublisherQuestions
        exclude = ('publisher')

和我的观点:

def register(request):
    if request.method == 'POST':

        form = PublisherForm(data = request.POST)
        formQuestions = PublisherQuestionsForm(data = request.POST)
        if form.is_valid() and formQuestions.is_valid():
            publisher = form.save()
            formQuestions.publisher = publisher   
            formQuestions.save()

            return HttpResponseRedirect('/thanks/')

因此,我尝试做的是将外键发布者的第二个表单“formQuestions”与PublisherForm中的publisher_id一起保存。

不幸的是MySQL / Django给了我以下错误。

Column 'publisher_id' cannot be null

这可能是一个完整的新手问题,是的,有很多人问过几乎相同,但没有一个解决方案适合我。

感谢您的帮助,一如既往地感谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试以下操作来检查是否收到相同的错误:

publisher = form.save()
questions = formQuestions.save(commit=False)
questions.publisher = publisher
questions.save()

使用commit=False,您可以获得Model而不将其保存到数据库中。 https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method

实际上,您想要操作Model,添加Publisher而不是表单。

如果您需要从表单中访问数据,我认为您应该使用例如: https://docs.djangoproject.com/en/dev/ref/forms/api/#accessing-clean-data

我如何理解你有一个ModelForm而不是Model,所以如果你想操纵Model,你首先需要创建它,或者至少它是操纵Model数据最干净的方法。否则你可以操纵Form数据,但这是另一个故事,你想选择原始数据或干净的数据等。