简体   繁体   中英

Django 2.0 CreateView not working

I am very new in Django. Not sure whether this is a bug or an error.

Here is my model in an app called gcbv (for generic class-based view)

from django.db import models
from core.models import TimeStampModel
from django.urls import reverse
# Create your models here.
class Vehicle(TimeStampModel):
    maker = models.CharField(max_length=100)
    model_year = models.IntegerField()
    vehicle_type = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)
    vehicle_model = models.CharField(max_length=100)
     website = models.URLField(max_length=100, blank=True)
    email = models.EmailField(max_length=100, blank=True)
    notes = models.TextField(blank=True, default='')
    def __str__(self):
        x = self.maker + ' ' + self.vehicle_model
        return x

And here are the URLs:

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from . import views
from django.urls import reverse
#from django.views.generic.base import TemplateView

app_name = 'gcbv'

urlpatterns = [
    path('sub1/', views.SubView.as_view(), name='sub1'),
    path('vehicle_list/', views.VehicleListView.as_view(),
        name = 'vehicle_list'),
    path('vehicle/<str:slug>/', 
       views.VehicleDetailView.as_view(), 
        name='vehicle_detail'),
    path('vehicle/create', views.VehicleCreateView.as_view(),
        name='vehicle_create'),    
    path('', views.IndexTemplateView.as_view(), name='index'),
]

And here is the relevant view:

class VehicleCreateView(CreateView):    
    model = Vehicle
    fields = ['maker', 'model_year', 'vehicle_type', 'slug',
        'vehicle_model', 'website', 'email', 'notes']
    labels = {'maker':'Maker', 'model_year':'Year', 
        'vehicle_type':'Type', 'vehicle_model':'Model',
        'website':'Website', 'email':'Email', 'notes':'Notes'}

Here is the template:

{% extends "core/base.html" %}
{% block body_block %}
    <h1>Vehicle Create for GCBV</h1>
    <form action="POST" action="">
        {% csrf_token %}
        {{ form.as_p }}
        <button name="submit" class="btn btn-primary">Submit</button>
    </form>
    <h1>End Vehicle Create for GCBV</h1>
{% endblock %}

It looks as if the data aren't saved in the database, but when i'm adding the same data by hand directly in the admin page, everything works fine. I've attached another screenshot showing that VehicleDetailView has found the relevant template and rendered the information.

Any help would be greatly appreciated.

NB: Everything worked fine when I use function views and regex instead of path.


Form 呈现的表单模板

After submit 点击提交后

List 点击提交后

Details 点击提交后

OK, this is what we septuagenarians call a "senior moment". I have been staring at this code for two days and did not see the obvious.

method="POST"!

NOT

action="POST"

Many, many thanks

In the fourth line of your template, method should be equal to "post"

{% extends "core/base.html" %} 

{% block body_block %}

 <h1>Vehicle Create for GCBV</h1> 

<form method="POST" action=""> 
{% csrf_token %}
 {{ form.as_p }}
 <button name="submit" class="btn btn-primary">Submit</button> 
</form> 
<h1>End Vehicle Create for GCBV</h1>
 {% endblock %}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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