django在保存modelform后获取主键并将其传递给第二个表单,但第二个表单可以';无法挽救
我有一个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()
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
,因此
应该是问题
,而不是问题
请将您的表格添加到问题中。为什么要将调查
的实例传递到问题表单
<代码>实例
应该是表单保存的对象,考虑到表单是用于问题
的,如果您将实例传递给它,它应该是问题
的实例。