django在保存modelform后获取主键并将其传递给第二个表单,但第二个表单可以';无法挽救

django在保存modelform后获取主键并将其传递给第二个表单,但第二个表单可以';无法挽救,django,Django,我有一个modelform,在保存表单后,我获得主键并将其传递给第二个表单,但是第二个表单数据是如何保存的。我不确定我做错了什么 def create_new_survey(request): if request.method == 'POST': form = NewSurveyForm(request.POST) if form.is_valid(): new_survey = form.save()

我有一个modelform,在保存表单后,我获得主键并将其传递给第二个表单,但是第二个表单数据是如何保存的。我不确定我做错了什么

def create_new_survey(request):
    if request.method == 'POST':
        form = NewSurveyForm(request.POST)
        if form.is_valid():
            new_survey = form.save()
            return HttpResponseRedirect(reverse(add_question, args=(new_survey.pk,)))
           

    else:
        form = NewSurveyForm()
    return render(request, 'create_new_survey.html', {'form': form})


def add_question(request, survey_id):
    if request.method == 'POST':
        person = Survey.objects.get(id=survey_id)
        form = QuestionForm(request.POST, instance=person)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/choice')
    else:
        form = QuestionForm()
        return render(request, 'question.html', {'form': form},)
型号:

class Survey(models.Model):
    title = models.CharField(max_length=200)
    #creator = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title


class Questions(models.Model):
    survey = models.ForeignKey(Survey, on_delete=models.CASCADE)
    enter_question = models.CharField(max_length=900)

    def __str__(self):
        return self.enter_question
class QuestionForm(forms.ModelForm):
    class Meta:
        model = Questions
        fields = ('enter_question',)
表格:

class Survey(models.Model):
    title = models.CharField(max_length=200)
    #creator = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title


class Questions(models.Model):
    survey = models.ForeignKey(Survey, on_delete=models.CASCADE)
    enter_question = models.CharField(max_length=900)

    def __str__(self):
        return self.enter_question
class QuestionForm(forms.ModelForm):
    class Meta:
        model = Questions
        fields = ('enter_question',)

在您的视图中,
add\u question
将表单定义为
form=QuestionForm(request.POST,instance=person)
,但这里的
person
调查的一个实例,而不是
问题的一个实例。
instance
关键字参数用于更新特定实例,而不是指定外键

如果要指定外键,只需修改表单包装的实例或为其提供未保存的
问题实例

def添加问题(请求、调查id):
如果request.method==“POST”:
person=Survey.objects.get(id=Survey\u id)
form=QuestionForm(request.POST)#从这里删除实例
如果form.is_有效():
form.instance.survey=person#在此处指定外键
form.save()
返回HttpResponseRedirect(“/choice”)
其他:
表单=问题表单()
返回呈现(请求'question.html',{'form':form},)
注意:模型名称在Django中最好是单数的,因为Django通常会通过在 模型名称,因此当前为您设置为
questions
,因此 应该是
问题
,而不是
问题


请将您的表格添加到问题中。为什么要将
调查
的实例传递到
问题表单
<代码>实例
应该是表单保存的对象,考虑到表单是用于
问题
的,如果您将实例传递给它,它应该是
问题
的实例。