Я пытаюсь создать приложение Django, в котором могут регистрироваться пользователи двух разных типов - арендаторы и арендодатели. Я добавил BooleanField в мой models.py, который добавит запись в БД, а в мои forms.py я добавил ChoiceField, где пользователи могут выбирать, кто они.
После нажатия кнопки Регистрация, учетная запись создана, но я получаю IntegrityError at /register.
Я использую Python 3, Django = 3.0.3 и django -crispy-forms = 1.8.1
модели. 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})
Traceback
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