1

我已经尝试了几乎所有我能找到的关于这个问题的方法,但我很确定我离解决我的问题只有一个小建议。

我正在尝试保存到同时使用 Django 的 forms 方法生成的表单。这些表单具有 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

这可能是一个完整的新手问题,是的,有很多人问的几乎一样,但没有一个解决方案对我有用。

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

4

1 回答 1

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

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

于 2013-05-12T20:11:43.470 回答