我已经看到有其他人和我一样有这个问题,但是尝试了所有这些解决方案后,他们似乎都没有帮助。我一直收到错误说:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Ethan/mysite/polls/views.py", line 32, in normalsignup
form.save()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/contrib/auth/forms.py", line 113, in save
user.save()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/contrib/auth/base_user.py", line 80, in save
super(AbstractBaseUser, self).save(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/base.py", line 808, in save
force_update=force_update, update_fields=update_fields)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/base.py", line 838, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/base.py", line 924, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/base.py", line 963, in _do_insert
using=using, raw=raw)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/query.py", line 1076, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 1107, in execute_sql
cursor.execute(sql, params)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/utils.py", line 80, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: polls_user.usertype
我知道这个问题与其中一个字段有关,但不知道是什么,或者如何开始尝试修复它。我已经复制了相关文件,我认为这是解决这个问题所必需的,并且非常感谢我能为此提供任何帮助。
以下是我的views.py
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render, render_to_response, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate
from django.shortcuts import render, redirect
from polls.forms import NormalSignUpForm, VenueSignUpForm, BLSignUpForm, BMSignUpForm, ProfileForm
from django.contrib.auth import get_user_model
from django.views.generic.detail import SingleObjectMixin
from django.views.generic import UpdateView, TemplateView
from django.utils.decorators import method_decorator
from django.db.models.signals import post_save
from polls.models import User
user = get_user_model()
def normalsignup(request):
if request.method == 'POST':
form = NormalSignUpForm(request.POST)
if form.is_valid():
form.save()
raw_password = form.cleaned_data.get('password1')
email = form.cleaned_data.get('email')
user = authenticate(username=email, password=raw_password)
login(request, user)
return redirect('home')
else:
form = NormalSignUpForm()
return render(request, 'normalsignup.html', {'form': form})
class ProfileView(TemplateView):
template_name = 'profile.html'
def get(self, request):
form = ProfileForm()
return render(request, self.template_name, {'form' : form})
def post(self, request):
form = ProfileForm(request.POST)
if form.is_valid():
post = form.save(commit = False)
post.user = request.user
post.save()
text = form.cleaned_data['post']
args = {'form' : form, 'text': text}
return render(request, self.template_name, args)
我的models.py
from django.db import models
from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models
from django.utils.translation import ugettext_lazy as _
class UserManager(BaseUserManager):
"""Define a model manager for User model with no username field."""
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
"""Create and save a User with the given email and password."""
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, **extra_fields):
"""Create and save a regular User with the given email and password."""
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
"""Create and save a SuperUser with the given email and password."""
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(email, password, **extra_fields)
class User(AbstractUser):
username = None
email = models.EmailField(_('email address'), unique=True)
usertype = models.IntegerField()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
和我的forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model
from polls.models import Post
User = get_user_model()
class NormalSignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
usertype = 1
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'password1', 'password2',)
我会非常感谢任何人和任何花在这上面的时间,因为我一直在寻找这个问题的解决方案已经有一段时间了,并且无法修复它。再次感谢您的帮助
答案 0 :(得分:2)
usertype = models.IntegerField()
- 是一个非空字段。
此处的问题是,您在表单usertype
中设置的NormalSignUpForm
在表单提交时未被提取,因此会发生违规。在保存用户实例时,您可以执行以下操作:
def normalsignup(request):
if request.method == 'POST':
form = NormalSignUpForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.usertype = 1
form.save()
raw_password = form.cleaned_data.get('password1')
email = form.cleaned_data.get('email')
user = authenticate(username=email, password=raw_password)
.......
答案 1 :(得分:1)
当您在
中记录用户时,您不需要保存表单所以请改用
def normalsignup(request):
if request.method == 'POST':
form = NormalSignUpForm(request.POST)
if form.is_valid():
form= form.save(commit=False)
form.usertype = 1
form.save()
raw_password = form.cleaned_data.get('password1')
email = form.cleaned_data.get('email')
user = authenticate(email=email, password=raw_password)
login(request, user)
return redirect('home')
else:
form = NormalSignUpForm()
return render(request, 'normalsignup.html', {'form': form})