【问题标题】:How do I save multiple forms in the same Django View from the same Model? Currently the last form overwrites in save如何在同一个模型的同一个 Django 视图中保存多个表单?目前最后一个表单在保存中覆盖
【发布时间】:2020-04-01 07:31:45
【问题描述】:

如何在同一个模型的同一个 Django 视图中保存多个表单?

当前最后一个表单在保存中覆盖

views.py

def createrequest_1(request):

  if request.method == 'POST':

    form1 = SurveyNameForm(request.POST)
    form2 = Question1Form(request.POST)
    form3 = Question2Form(request.POST)

    if form1.is_valid() and form2.is_valid() and form3.is_valid():
        survey = form1.save(commit=False)
        question1 = form2.save(commit=False)
        question2 = form3.save(commit=False)
        survey.survey_creation_date = datetime.date.today()
        survey.customuser = request.user
        survey.save() 
        question1.survey = survey 
        question1.save()
        question2.survey = survey 
        question2.save()

        return HttpResponseRedirect('createrequest_2')
    else:
        form = SurveyNameForm()

  return render(request, 'requestapp/createrequest_1.html', {'SurveyNameForm': SurveyNameForm, 'Question1Form':Question1Form, 'Question2Form': Question2Form})

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    您必须为每个表单设置不同的前缀。 将要呈现的表单实例放入模板中。

    这样:

    def createrequest_1(request):
        form1 = SurveyNameForm(request.POST or None, prefix='survey')
        form2 = Question1Form(request.POST or None, prefix='question1')
        form3 = Question2Form(request.POST or None, prefix='question2')
    
        if request.method == 'POST':
    
            if form1.is_valid() and form2.is_valid() and form3.is_valid():
                survey = form1.save(commit=False)
                question1 = form2.save(commit=False)
                question2 = form3.save(commit=False)
                survey.survey_creation_date = datetime.date.today()
                survey.customuser = request.user
                survey.save()
                question1.survey = survey
                question1.save()
                question2.survey = survey
                question2.save()
    
                return HttpResponseRedirect('createrequest_2')
    
    
        return render(request, 'requestapp/createrequest_1.html',
                      {'SurveyNameForm': form1, 'Question1Form': form2, 'Question2Form': form3})
    

    这在https://docs.djangoproject.com/en/3.0/ref/forms/api/#django.forms.Form.prefix中有解释

    【讨论】:

    • 谢谢,这解决了我的问题!!您知道如何从显示输出中删除“此字段为必填项”消息吗?使用您的代码已将其添加,但我不确定是什么创建了它。
    • 以这种方式删除所需消息的实例表单: form1 = SurveyNameForm(request.POST or None, prefix='survey') form2 = Question1Form(request.POST or None, prefix='question1') form3 = Question2Form(request.POST or None, prefix='question2')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2015-01-31
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多