使用基于类的视图提交模型表单时出现405错误

时间:2019-04-11 03:44:56

标签: django django-forms

我创建了一个ModelForm,可以正确呈现并显示它,但是每当我尝试提交表单时,我都会收到405错误,并且页面不会重定向到成功页面。

我已经遍历django 2.2文档,尝试了许多不同的东西,但是似乎没有任何作用

我的代码配置为这样的模板:

<form enctype="multipart/form-data" action="{% url 'order_thanks' %}" 
method="post" novalidate>
  {% csrf_token %}
  {{ form|crispy }}
  <input name="Submit" type="submit" class="btn btn-success" value="Git my 
food!"></input>

模型:

from django.db import models
from django.forms import ModelForm, Textarea, Select, 
CheckboxSelectMultiple, CheckboxSelectMultiple
from django import forms
BURGER_CHOICES = (("AFBB", "Aurion's Famous Beef Burger"), ("AIPB", 
"Aurion's Infamous Pork Burger"), ("AULB", "Aurion's Undiscovered Lamb 
Burger"), ("POG", "Pureed Otter Giblets"))
BUN_CHOICES = (("WHITE","White Bread"), ("RYE","Rye"), ("TPOODLE", 
"Teacup Poodles"), ("AFOSSIL","Ammonite Fossils"))
TOPPING_CHOICES = (("CHEESE", "Cheese"), ("LETTUCE", "Lettuce"), 
("TOMATOE", "Tomatoe"), ("ONION", "Onion"), ("WSHAVE", "Wood Shavings"))
SAUCES_CHOICES = (("OZTS", "Our Zesty Barbaque Sauce"), ("SEZBS", 
"Someone Elses Zesty Barbaque Sauce"), ("VS", "Varmint Squeezings"))
EXTRAS_CHOICES = (("P", "Pinapple"), ("SG", "Soylent Green"), ("SB", 
"Soylent Blue"), ("MWS", "More Wood Shavings"))

class Order(models.Model):
    burger = models.CharField(max_length=50,choices=BURGER_CHOICES )
    bun = models.CharField(max_length=50, choices=BUN_CHOICES)
    toppings = models.CharField(max_length=60, choices=TOPPING_CHOICES)
    sauces = models.CharField(max_length=60, choices=SAUCES_CHOICES)
    extras = models.CharField(max_length=60, choices=EXTRAS_CHOICES)

    # def get_absolute_url(self):
    #     return reverse('burger', kwargs={'pk': self.pk})

    def __str__(self):
        return self.burger

    def get_absolute_url(self):
        return reverse('order-thanks', kwargs={'pk': self.pk})

class OrderForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(OrderForm, self).__init__(*args, **kwargs)
        self.fields['toppings'].widget = forms.CheckboxSelectMultiple()
        for field_name in self.fields:
            field = self.fields.get(field_name)
            if field and isinstance(field , forms.TypedChoiceField):
                field.choices = field.choices[1:]
        self.fields['extras'].widget = forms.CheckboxSelectMultiple()

    class Meta:
        model = Order
        fields = ['burger', 'bun', 'toppings', 'sauces', 'extras']

视图:

class OrderView(CreateView, FormView):
    template_name = 'order_form.html'
    form_class = OrderForm
    success_url = 'order/thanks/'
    def form_valid(self, form):
        form.instance.created_by = self.request.user
        return super().form_valid(form)
    def get(self, request):
        return Response(code=200)


class OrderThanksView(TemplateView):
    template_name = 'order_thanks.html'

网址:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.HomePage.as_view(),name='home'),
    path('about/', views.AboutPage.as_view(),name='about'),
    path('order/', views.OrderView.as_view(),name='order'),
    path('order/thanks/', 
views.OrderThanksView.as_view(),name='order_thanks'),
]

应用程序,我不知道如何在帖子中正确显示代码。

我在代码中添加了一些调试功能,结果证明该表单无效,因此重定向不会发生?

===============

通过将多项选择复选框设置为blank = True并将模板中的操作设置为“ {%url'order'%}

当您选择带有eh复选框的多个选项时,表单似乎存在问题。任何帮助将不胜感激。

0 个答案:

没有答案