繁体   English   中英

django FormView没有创建对象或重定向到success_url

django FormView not creating object or redirecting to success_url

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

尝试通过基于类的FormView来实现django表单,并且遵循这些文档对我不起作用( https://docs.djangoproject.com/en/1.11/topics/class-based-views/generic-editing/。Project是1.11.9

models.py

class Contact(models.Model):
    name = models.CharField(max_length=100)
    company = models.CharField(max_length=100)
    email = models.EmailField(unique=True)
    message = models.TextField()
    date_created = models.DateField(verbose_name="Created date", auto_now_add="True")

forms.py

from django import forms

from .models import Contact

class ContactForm(forms.ModelForm):

    class Meta:
        model = Contact
        labels = {
            'company': 'Company or Organization'
        }
        exclude = ('date_created',)

views.py

from django.shortcuts import render
from django.core.mail import send_mail
from django.views.generic import FormView, TemplateView

from .forms import ContactForm

class ContactFormView(FormView):

    form_class = ContactForm
    template_name = "contact.html"
    success_url = '/thanks/'

    def form_valid(self,form):
        message = "{name} from {company} / {email} said: ".format(
            name=form.cleaned_data.get('name'),
            company=form.cleaned_data.get('company'),
            email=form.cleaned_data.get('email'))
        message += "\n\n{0}".format(form.cleaned_data.get('message'))
        send_mail(
            subject='new message',
            message=message,
            from_email='foo@bar.com',
            recipient_list=['foo@blah.com',]
        ) 
        form.save()
        return super(ContactFormView, self).form_valid(form)

urls.py

from django.conf.urls import url
from django.views.generic import TemplateView

from . import views

from .views import ContactFormView


urlpatterns = [
    url(r'^contact/?$', ContactFormView.as_view(), name="contact"),
    url(r'^thanks/?$', views.thanks, name="thanks"),
    url(r'^.*$', RedirectView.as_view(url=reverse_lazy('index'), permanent=True), name='home')

]

contact.html

{% extends 'base.html' %}
{% load humanize %}

{% block title %}Contact Us{% endblock %}

{% block content %}
<div class="wrapper">
  <div id="content" class="container push-half">
     <div class="col-lg-12">

         <h1>Contact</h1>

         <p class="push">Please use the form below to send us a message, and we'll get back to you as soon as we can.</p>
          <div class="push cf">
              <form action="." method="post" class="contact-form">
                      {% csrf_token %}
                      {{ form }}
                      <div class="clearfix"></div>
                      <input type="submit" value="Submit" id="contact-submit-btn" class="btn" />
              </form>
          </div>    
      </div>
  </div>
</div>
{% endblock %}

首先,我有一个'thanks'视图,但是表单提交上的success_url只是将重定向视图调用回首页。 还尝试了success_url = reverse_lazy('thanks')但仍被重定向回首页。 我是否需要显式覆盖get_success_url才能正常工作? 可能相关, form.save()不会从db字段中的db中创建新的Contact对象。 谢谢

1 个回复

在URL /contact (不带斜杠)上, <form action="." ...> <form action="." ...>表示请求将提交给/

更改操作以专门发布到联系人视图:

<form action="{% url 'contact' %}" method="post" class="contact-form">

通常,我建议您停止将尾部斜杠设为可选,并让Django从/contact重定向到/contact/ 但是,这可能由于您的全部重定向而行不通。

仔细考虑一下您是否真的想要这种全面的重定向,它将微妙地改变Django的行为。 几乎可以肯定,您不需要permanent=True进行重定向-如果将来添加另一个视图,浏览器将缓存该重定向并继续重定向到主页。

1 来自FormView中创建的对象url的Success_url

我有一个表单类视图,当用户填写表单时会创建一个对象(目录中的产品)。 该对象在视图的form_valid方法内创建。 我希望该视图通过FormView的“ success_url”属性重定向到创建的对象url(产品url)。 问题是我不知道如何在success_url方法中指定该url ...

4 当没有提供 success_url 时,Django 中的 CreateView 重定向到哪个 URL?

我正在 Django 中学习基于类的视图(从通用视图继承),并偶然发现了一个没有提供任何 success_url 的 CreateView 代码。 但是在创建之后,我被重定向到 DetailView(即描述特定对象的页面,在这种情况下是刚刚创建的对象)。 我不确定这种重定向是如何发生的。 谁能帮我这 ...

2020-03-19 00:53:09 1 20   django
8 使用模态表单发布并留在当前页面后,如何不重定向到Django中的success_url?

这是我的问题,我有一种包含外键领域药物的模型药物。 在药物创建视图中,如果记录中未找到某种药物,我想随时随地创建它。 因此,我尝试使用PyPi的django-bootstrap-modal-forms基本上执行了所说的操作。 但是,当我发布帖子来创建新药物时,即使没有在DrugCreate ...

9 我在 Django 视图中的 success_url 中放了什么。 现在,这不是保存编辑过的表单,也不是重定向页面

我不知道在 django 视图中使用什么或如何使用 success_url。 我试过在网上阅读但不明白,也试过做一些别人告诉我的事情但没有用。 我很确定我做错了什么,但我不知道是什么以及如何解决它。 视图.py: 网址.py: 如果我这样做,那么它会被重定向到: 当我将它重定向到我的 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM