python - 在提交到带有详细信息的谢谢页面后尝试保存 django 表单数据
问题描述
如果我在表单提交页面中添加重定向 url,页面正在重定向,但表单数据没有保存到 db。如果我删除重定向 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>
解决方案
该类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
基类而不是手动编码表单视图来节省自己的精力:)
推荐阅读
- python - 如何单击鼠标悬停后变为可见的元素
- console - 是否可以为 google colab 获取控制台(如在 R 工作室中)?
- python - 如何使用 pytest-django 在每个会话中只创建一次用户对象?
- operating-system - 先到先服务器算法的调度队列
- c# - 微服务之间的 Service Fabric wcf 通信
- javascript - Firestore 将函数返回添加到数据库
- ios - Swift Segue - 当现有的过渡或演示发生时;导航堆栈将不会更新
- python - 将json数据的特定元素转换为python对象
- node.js - Firebase CORS 策略仅针对某些功能阻止
- spring-webflux - Reactor 框架与组装时间和订阅时间混淆(何时调用订阅)