首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django :邮件不起作用后重定向

Django :邮件不起作用后重定向
EN

Stack Overflow用户
提问于 2020-01-27 15:33:03
回答 2查看 59关注 0票数 0

在创建moneylog之后,我想回到moneybook_detail,所以我做了一个moneybook_detail

代码语言:javascript
复制
 class moneylog_create(CreateView):
    form_class = forms.CreateMoneylogForm
    template_name = "moneylogs/create.html"

    def form_valid(self, form):
        moneylog = form.save()
        moneybook = moneybook_models.Moneybook.objects.get(
            pk=self.kwargs["pk"])
        form.instance.moneybook = moneybook
        moneylog.save()
        form.save_m2m()
        return redirect(reverse("moneybooks:detail", kwargs={'pk': moneybook.pk}))

这是moneybook/urls.py

代码语言:javascript
复制
app_name = "moneybooks"

urlpatterns = [
    path("create/", views.moneybook_create.as_view(), name="create"),
    path("update/<int:pk>/",
         views.moneybook_update.as_view(), name="update"),
    path("<int:pk>/", views.moneybook_detail, name="detail")
]

moneylogs/urls.py

代码语言:javascript
复制
app_name = "moneylogs"

urlpatterns = [
    path("create/<int:pk>/", views.moneylog_create.as_view(), name="create"),
    path("update/<int:pk>/", views.moneylog_update.as_view(), name="update")
]

这是我的detail.html

代码语言:javascript
复制
<a style="display:scroll;position:fixed;bottom:50px;right:30px;" href="{% url 'moneylogs:create' pk %}">
    <div class="rounded-full h-16 w-16 flex items-center justify-center bg-red-400 text-bold font-bold text-white">+</div>
</a> 

这是我的moneylogs/forms.py

代码语言:javascript
复制
class CreateMoneylogForm(forms.ModelForm):
    class Meta:
        model = models.Moneylog
        fields = (
            "pay_day",
            "payer",
            "dutch_payer",
            "price",
            "category",
            "memo",
        )
        widgets = {
            "payer": forms.RadioSelect(attrs={"style": "width: 100 %"}),
            "dutch_payer": forms.CheckboxSelectMultiple,
            "memo": forms.Textarea(attrs={"rows": 3})
        }

    def save(self, *args, **kwargs):
        moneylog = super().save(commit=False)
        return moneylog

和moneylog_form.html

代码语言:javascript
复制
<form method="POST" class="w-full" enctype="multipart/form-data">
    {% csrf_token %}

    {% if form.non_field_errors %}
        {% for error in form.non_field_errors %}
            <span class="text-red-700 font-medium text-sm">{{error}}</span> 
        {% endfor %}
    {% endif %}

        <div class="input {% if field.errors %}has_error{% endif %}">
            <div class="flex">
                <div class="w-1/4">
                    {{form.name.label}} 
                </div>
                <div class="w-3/4 border-b my-2 py-3">
                    {{form.name}}
                </div>
            </div>
            {% if form.name.errors %}
                {% for error in form.name.errors %}
                    <span class="text-red-700 font-medium text-sm">{{error}}</span> 
                {% endfor %}
            {% endif %}
        </div>


        <div class="input {% if field.errors %}has_error{% endif %}">
            <div class="flex">
                <div class="w-1/4">
                    {{form.companion.label}} 
                </div>
                <div class="w-3/4 flex inline border-b my-2 py-3">
                    <div class="w-3/4">
                        {{form.companion}}
                    </div>
                    <div class= "w-1/4 flex justify-center ">
                        <a href="{% url 'tempfriends:create' %}"><i class="fas fa-plus-circle"></i></a>
                    </div>
                </div>
            </div>
            {% if form.companion.errors %}
                {% for error in form.companion.errors %}
                    ><span class="text-red-700 font-medium text-sm">{{error}}</span>
                {% endfor %}
            {% endif %}
        </div>


        <div class="input {% if field.errors %}has_error{% endif %}">
            <div class="flex">
                <div class="w-1/4">
                    {{form.country.label}} 
                </div>
                <div class="w-3/4 border-b my-2 py-3">
                    {{form.country}}
                </div>
            </div>
            {% if form.country.errors %}
                {% for error in form.country.errors %}
                    <span class="text-red-700 font-medium text-sm">{{error}}</span> 
                {% endfor %}
            {% endif %}
        </div>


        <div class="input {% if field.errors %}has_error{% endif %}">
            <div class="flex">
                <div class="w-1/4">
                    {{form.location.label}} 
                </div>
                <div class="w-3/4 border-b my-2 py-3">
                    {{form.location}}
                </div>
            </div>
            {% if form.location.errors %}
                {% for error in form.location.errors %}
                    <span class="text-red-700 font-medium text-sm">{{error}}</span> 
                {% endfor %}
            {% endif %}
        </div>


        <div class="input {% if field.errors %}has_error{% endif %}">
            <div class="flex">
                <div class="w-1/4">
                    {{form.start_date.label}} 
                </div>
                <div class="w-3/4 border-b my-2 py-3">
                    {{form.start_date}}
                </div>
            </div>
            {% if form.start_date.errors %}
                {% for error in form.start_date.errors %}
                    <span class="text-red-700 font-medium text-sm">{{error}}</span> 
                {% endfor %}
            {% endif %}
        </div>


        <div class="input {% if field.errors %}has_error{% endif %}">
            <div class="flex">
                <div class="w-1/4">
                    {{form.end_date.label}} 
                </div>
                <div class="w-3/4 border-b my-2 py-3">
                    {{form.end_date}}
                </div>
            </div>
            {% if form.end_date.errors %}
                {% for error in form.end_date.errors %}
                    <span class="text-red-700 font-medium text-sm">{{error}}</span> 
                {% endfor %}
            {% endif %}
        </div>


    <button class="px-2 py-1 rounded bg-red-500 text-white">{{cta}}</button>
</form>

没有页面重定向。不动,它只打印日志

"POST /moneylogs/create/1/ HTTP1.1“2005275

如何在创建moneylog之后返回到moneybook_detail??为什么我的重定向不能工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-27 17:31:00

当接收到一个CreateView请求时,泛型POST有两个可能的返回路径:

  • form_valid(),在您的情况下重定向。这是一个HTTP 302.
  • form_invalid(),它使用上下文中绑定的表单再次呈现模板,以显示错误。这是HTTP 200.

由于您的请求返回状态200,我们可以得出结论,视图进入了form_invalid()方法,这意味着您的表单有错误。似乎您正在呈现各种字段错误(虽然您显示的模板是错误的表单,但我假设这是一个复制和粘贴错误),但最容易调试的是在模板顶部添加{{ form.errors }}以显示all error。或在form_invalid()方法中设置断点(将其重写为return super().form_invalid(form))。

票数 1
EN

Stack Overflow用户

发布于 2020-01-27 15:39:21

要么更改app_name,要么在details.html中更改href。因为在一个地方提到了moneylogs,在另一个地方提到了moneybooks

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59934226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档