Django 非空约束失败:users\u profile.usertype

Django 非空约束失败:users\u profile.usertype,django,python-3.x,django-models,django-forms,django-crispy-forms,Django,Python 3.x,Django Models,Django Forms,Django Crispy Forms,我正在尝试构建一个Django应用程序,其中有两种不同类型的用户可以注册——租户和房东。我在my models.py中添加了一个Boolean字段,该字段将向DB中添加一个条目。在my forms.py中,我添加了一个ChoiceField,用户可以选择自己是谁 单击“注册”后,将创建帐户,但我在/Register处获得一个IntegrityError。 我使用的是Python 3、Django=3.0.3和Django crispy forms=1.8.1 models.py from dja

我正在尝试构建一个Django应用程序,其中有两种不同类型的用户可以注册——租户和房东。我在my models.py中添加了一个Boolean字段,该字段将向DB中添加一个条目。在my forms.py中,我添加了一个ChoiceField,用户可以选择自己是谁

单击“注册”后,将创建帐户,但我在/Register处获得一个
IntegrityError。

我使用的是Python 3、Django=3.0.3和Django crispy forms=1.8.1

models.py

from django.db import models
from django.contrib.auth.models import User
from PIL import Image

usertypechoices = [(1,'Landlord'),(2,'Tenant')]

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    usertype = models.BooleanField(choices=usertypechoices)

    def __str__(self):
        return f'{self.user.username} Profile'

    # Resize images to reduce memory wasted
    def save(self, *args, **kwargs):
        super(Profile, self).save(*args, **kwargs)

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300,300)
            img.thumbnail(output_size)
            img.save(self.image.path) 
forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm 
from .models import Profile
from django.forms import ModelForm
from .models import usertypechoices

class UserRegistrationForm(UserCreationForm):
    email = forms.EmailField()
    usertype = forms.ChoiceField(choices=usertypechoices)

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']
views.py

from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegistrationForm, UserUpdateForm, ProfileUpdateForm
from django.contrib.auth.decorators import login_required


def register(request):
    if request.method == 'POST':
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f'Your account has been created! You are now able to log in')
            return redirect('login')
    else:
        form = UserRegistrationForm()
    return render(request, 'users/register.html', {'form': form})
回溯

Internal Server Error: /register
Traceback (most recent call last):
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\backends\utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 396, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: NOT NULL constraint failed: users_profile.usertype

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Maksims\PycharmProjects\FYP\RSDEMO\users\views.py", line 11, in register
    form.save()
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\contrib\auth\forms.py", line 137, in save
    user.save()
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\contrib\auth\base_user.py", line 66, in save
    super().save(*args, **kwargs)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\base.py", line 746, in save
    force_update=force_update, update_fields=update_fields)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\base.py", line 795, in save_base
    update_fields=update_fields, raw=raw, using=using,
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\dispatch\dispatcher.py", line 175, in send
    for receiver in self._live_receivers(sender)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\dispatch\dispatcher.py", line 175, in <listcomp>
    for receiver in self._live_receivers(sender)
  File "C:\Users\Maksims\PycharmProjects\FYP\RSDEMO\users\signals.py", line 11, in create_profile
    Profile.objects.create(user=instance)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\query.py", line 433, in create
    obj.save(force_insert=True, using=self.db)
  File "C:\Users\Maksims\PycharmProjects\FYP\RSDEMO\users\models.py", line 17, in save
    super(Profile, self).save(*args, **kwargs)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\base.py", line 746, in save
    force_update=force_update, update_fields=update_fields)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\base.py", line 784, in save_base
    force_update, using, update_fields,
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\base.py", line 887, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\base.py", line 926, in _do_insert
    using=using, raw=raw,
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\query.py", line 1204, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1384, in execute_sql
    cursor.execute(sql, params)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\backends\utils.py", line 100, in execute
    return super().execute(sql, params)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\backends\utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\backends\utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\backends\utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\backends\utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 396, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: users_profile.usertype
内部服务器错误:/register
回溯(最近一次呼叫最后一次):
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\backends\utils.py”,第86行,在执行中
返回self.cursor.execute(sql,params)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\backends\sqlite3\base.py”,第396行,在execute中
返回Database.Cursor.execute(self、query、params)
sqlite3.IntegrityError:非空约束失败:users\u profile.usertype
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\core\handlers\exception.py”,第34行,在内部
响应=获取响应(请求)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\core\handlers\base.py”,第115行,在get\U响应中
response=self.process\u异常\u由\u中间件(e,请求)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\core\handlers\base.py”,第113行,在get响应中
响应=包装的回调(请求,*回调参数,**回调参数)
文件“C:\Users\Maksims\PycharmProjects\FYP\RSDEMO\Users\views.py”,第11行,在寄存器中
form.save()
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\contrib\auth\forms.py”,第137行,保存
user.save()
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\contrib\auth\base\u user.py”,第66行,保存
super().save(*args,**kwargs)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\base.py”,第746行,保存
强制更新=强制更新,更新字段=更新字段)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\base.py”,第795行,在save\u base中
更新\字段=更新\字段,原始=原始,使用=使用,
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\dispatch\dispatcher.py”,第175行,在send中
对于自身中的接收者。\u现场\u接收者(发送者)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\dispatch\dispatcher.py”,第175行,在
对于自身中的接收者。\u现场\u接收者(发送者)
文件“C:\Users\Maksims\PycharmProjects\FYP\RSDEMO\Users\signals.py”,第11行,在create\u profile中
Profile.objects.create(用户=实例)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\manager.py”,第82行,在manager\u方法中
返回getattr(self.get_queryset(),name)(*args,**kwargs)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\query.py”,第433行,在create中
对象保存(force_insert=True,using=self.db)
文件“C:\Users\Maksims\PycharmProjects\FYP\RSDEMO\Users\models.py”,第17行,保存
超级(配置文件,自我)。保存(*args,**kwargs)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\base.py”,第746行,保存
强制更新=强制更新,更新字段=更新字段)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\base.py”,第784行,在save\u base中
强制更新,使用,更新字段,
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\base.py”,第887行,在保存表中
结果=self.\u do\u insert(cls.\u基本\u管理器,使用,字段,返回\u字段,原始)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\base.py”,第926行,插入
使用=使用,原始=原始,
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\manager.py”,第82行,在manager\u方法中
返回getattr(self.get_queryset(),name)(*args,**kwargs)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\query.py”,第1204行,插入
return query.get\u编译器(using=using).execute\u sql(返回\u字段)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\models\sql\compiler.py”,第1384行,在execute\U sql中
cursor.execute(sql,params)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\backends\utils.py”,执行中第100行
return super().execute(sql,params)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\backends\utils.py”,执行中第68行
返回self.\u使用包装器执行(sql,params,many=False,executor=self.\u execute)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\backends\utils.py”,第77行,使用包装器执行
返回执行器(sql、参数、多个、上下文)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\backends\utils.py”,第86行,在执行中
返回self.cursor.execute(sql,params)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\utils.py”,第90行,在退出时__
使用exc_值的_回溯(回溯)提高dj_exc_值
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\backends\utils.py”,第86行,在执行中
返回self.cursor.execute(sql,params)
文件“C:\Users\Maksims\PycharmProjects\FYP\venv\lib\site packages\django\db\backends\sqlite3\base.py”,第396行,在execute中
返回Database.Cursor.execute(self、query、params)
django.db.utils.IntegrityError:非空约束失败:users\u profile.usertype

您可以通过添加默认值来修复它