When I try to register a new user I get an error: Cannot force both insert and updating in model saving. But the user is created although his profile is not created automatically.
Traceback:
Traceback (most recent call last):
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/views/generic/base.py", line 104, in view
return self.dispatch(request, *args, **kwargs)
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/views/generic/base.py", line 143, in dispatch
return handler(request, *args, **kwargs)
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/views/generic/edit.py", line 184, in post
return super().post(request, *args, **kwargs)
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/views/generic/edit.py", line 153, in post
return self.form_valid(form)
File "/home/maks/PycharmProjects/games/users/views.py", line 31, in form_valid
self.object = form.save()
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/contrib/auth/forms.py", line 151, in save
user.save()
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/contrib/auth/base_user.py", line 76, in save
super().save(*args, **kwargs)
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/db/models/base.py", line 814, in save
self.save_base(
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/db/models/base.py", line 892, in save_base
post_save.send(
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 176, in send
return [
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 177, in <listcomp>
(receiver, receiver(signal=self, sender=sender, **named))
File "/home/maks/PycharmProjects/games/users/signals.py", line 10, in create_user_profile
Profile.objects.get_or_create(user=instance)
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/db/models/manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/db/models/query.py", line 923, in get_or_create
return self.create(**params), True
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/db/models/query.py", line 658, in create
obj.save(force_insert=True, using=self.db)
File "/home/maks/PycharmProjects/games/users/models.py", line 30, in save
super().save(*args, *kwargs)
File "/home/maks/PycharmProjects/games/.venv/lib/python3.10/site-packages/django/db/models/base.py", line 782, in save
raise ValueError("Cannot force both insert and updating in model saving.")
ValueError: Cannot force both insert and updating in model saving.
signals.py
Automatic profile creation(which doesn’t work).
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from users.models import Profile
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.get_or_create(user=instance)
registration:
class RegisterUser(CreateView):
form_class = RegisterForm
template_name = 'users/register.html'
def form_valid(self, form):
self.object = form.save()
return redirect('users:login')
Profile model:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
slug = models.SlugField(verbose_name='URL', max_length=255, blank=True, unique=True)
photo = models.ImageField(
upload_to='users/%Y/%m/%d/',
blank=True,
null=True,
)
date_birth = models.DateField(blank=True,
null=True)
email_is_verified = models.BooleanField(default=False)
USERNAME_FIELD = 'user'
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.user.username)
while Profile.objects.filter(slug=self.slug).exists():
self.slug = slugify(f"{self.user.username}-{random.randint(1, 1000)}")
super().save(*args, *kwargs)
def __str__(self):
return f"{self.user.username} ({self.user.email})"