【问题标题】:trying to save django form data after submit to a thankyou page with details在提交到带有详细信息的谢谢页面后尝试保存 django 表单数据
【发布时间】:2020-07-27 12:38:42
【问题描述】:

如果我在表单提交页面中添加重定向 url,页面正在重定向,但表单数据没有保存到数据库。如果我删除重定向 url,表单数据将被保存,但我的重定向不起作用。我需要重定向到包含活动详细信息以及感谢信息的页面。

请告诉我哪里出错了..

#forms.py

class UserForm(forms.ModelForm):
    class Meta:
        model = webinar_user
        fields = ['first_name', 'last_name', 'email_id', 'contact_no', 'city', 
        'state','postal_code','country','company']

#views.py

def post_detail(request, slug):
    template_name = "site/new_form.html"
    event = get_object_or_404(webinar_event, slug=slug)
    # event = get_object_or_404(webinar_event, pk=post_id)
    # success_url = "events:thankyou"
    user_data= None
    if request.method == "POST":
        user_form = UserForm(data=request.POST)
        print("form")
        if user_form.is_valid():
            print("form valid")
            user_data= user_form.save(commit=False)
            user_data.event= event
            req= user_data.save()

            subject = 'Thank You for registering for the webinar'
            context={'first_name':user_data.first_name, 'title':event.title, 
            'description':event.about_event, 'event_date':event.event_date, 
            'event_time':event.event_time, 'event_duration':event.event_duration}

            message = get_template('site/emails/thank_you.html').render(context)
            email_from = settings.EMAIL_HOST_USER
            email_id = user_form.cleaned_data['email_id']
            recipient_list = [email_id, ]
            email = EmailMessage(subject, message, email_from, recipient_list)
            email.content_subtype = 'html'
            email.send()

            return HttpResponseRedirect('events:thank_you', kwargs={'id':req.id})
)
    else:
        user_form = UserForm()

    return render(
        request,
        template_name,
        {
            "event": event,
            "user_data":user_data,
            "user_form": user_form
        },
    )

def thank_you(request, id):

    event = webinar_event.objects.get(pk=id)
    return render(request, 'site/thankyou.html',
                              {'event' : event})

html代码

<div class="testbox">
     {% if event.event_image %}
     <img src={{event.event_image.url}}>
     {% endif %}
      <form action="{% url 'events:thank_you' event.id%}" method= "post">

          {% csrf_token %}

          <div class="banner">
          <h1>{{event.title}}</h1>
              <br>
              <hr>
              <h2>{{event.event_date}}</h2>
<!--            <img src={{event.image.url}}>-->

        </div>

【问题讨论】:

    标签: python html django


    【解决方案1】:

    HttpResponseRedirect 类不进行 URL 解析。

    你可以这样做

    url = resolve_url('events:thank_you', kwargs={'id':req.id}))
    return HttpResponseRedirect(url)
    

    或者最好

    from django.shortcuts import redirect
    # ...
    return redirect('events:thank_you', id=req.id)
    

    ...在未来,通过使用CreateView 基类而不是手动编码表单视图来节省您的精力:)

    【讨论】:

    • 感谢您的快速回复。我的问题或多或少是保存表单数据。如果我将此 action="{% url 'events:thank_you' event.id%}" 更改为 action="",表单数据将被保存,但在感谢页面中我无法获取事件信息。如果我保留操作 url,表单数据不会保存到 db,但感谢页面上带有事件详细信息的重定向正在工作..
    • 您将webinar_user 的ID 传递到感谢页面,并试图获得具有相同ID 的webinar_event...
    • 哦..我以为我在传递网络研讨会活动的 id..因为我能够在感谢页面上获取数据
    【解决方案2】:

    我已经通过删除表单中的操作 url 并调用 kwargs={'id':event.id}) 并将返回更改为 return HttpResponseRedirect(reverse('events:thank_you', kwargs={'id ':event.id}))。

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多