我接受了一个非常简单的 django 挑战,但是在输入详细信息并将其提交到数据库时遇到问题。我的表格甚至没有显示输入细节,我不知道做错了什么。
模型.py
class Users(models.Model):
name = models.CharField(max_length=200)
email = models.CharField(max_length=60, unique=True)
created_at = models.DateTimeField(auto_now=True)
updated_at = models.DateTimeField(auto_now_add=True)
视图.py
from django.shortcuts import render
from django.http import HttpRequest
from django.template import RequestContext
from datetime import datetime
from django.http import HttpResponseRedirect
from .models import Users
from .forms import UserForm
def home(request):
return render(request, 'pages/home.html', {})
def list(request):
users = Users.objects.order_by('created_at').all()
context = {'users': users}
return render(request, 'pages/list.html', context)
def add(request):
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
user = User(name=request.POST['name'], email=request.POST['email'])
user.save()
return HttpResponseRedirect('/list/')
return render(request, 'pages/list.html', {'form': form})
表格.py
from django import forms
from django.core.validators import validate_email
from .models import Users
class UserForm(forms.Form):
name = forms.CharField(label='Name', max_length=200, widget=forms.TextInput(attrs={'class': 'form-control'}))
email = forms.EmailField(label='Email', max_length=60, widget=forms.TextInput(attrs={'class': 'form-control'}))
def clean_email(self):
email = self.cleaned_data['email']
if Users.objects.filter(email=email).exists():
raise forms.ValidationError('Email already exists')
return email
add.html(模板):
{% extends "base.html" %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>Add user</h1>
{{ form.non_field_errors }}
<form name='form' method="POST" action="/add/">
{% csrf_token %} {% for field in form %}
<div class="form-group">
{{ field.label_tag }} {{ field }} {% if field.errors %}
<ul class="errorlist">
{% for error in field.errors %}
<li>{{ error|escape }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% endfor %}
<button type="submit" class="btn btn-primary">Add</button>
</form>
</div>
</div>
</div>
{% endblock %}
网址.py
from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin
from django.views.generic import TemplateView
from django.views import defaults as default_views
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='pages/home.html'), name='home'),
url(r'^list/', TemplateView.as_view(template_name='pages/list.html'), name='list'),
url(r'^add/', TemplateView.as_view(template_name='pages/add.html'), name='add'),
url(r'^about/$', TemplateView.as_view(template_name='pages/about.html'), name='about'),
# Django Admin, use {% url 'admin:index' %}
url(settings.ADMIN_URL, admin.site.urls),
# User management
url(r'^users/', include('seedstar_django_challenge.users.urls', namespace='users')),
url(r'^accounts/', include('allauth.urls')),
# Your stuff: custom urls includes go here
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
if settings.DEBUG:
# This allows the error pages to be debugged during development, just visit
# these url in browser to see how these error pages look like.
urlpatterns += [
url(r'^400/$', default_views.bad_request, kwargs={'exception': Exception('Bad Request!')}),
url(r'^403/$', default_views.permission_denied, kwargs={'exception': Exception('Permission Denied')}),
url(r'^404/$', default_views.page_not_found, kwargs={'exception': Exception('Page not Found')}),
url(r'^500/$', default_views.server_error),
]
if 'debug_toolbar' in settings.INSTALLED_APPS:
import debug_toolbar
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls)),
] + urlpatterns
当我检查我的日志时,我得到以下信息:
因此,当我单击“添加”时,没有任何反应,没有输入表单,更不用说将详细信息保存在数据库中。如果您需要很好地查看,repo 就在这里。
我哪里错了?
注意我正在使用cookiecutter。