Перезапись метода сохранения для автоматического создания записи в связанной таблице django
После регистрации новому пользователю отправляется письмо с подтверждением электронной почты. Я создал модель UserWithConfirmation с новым полем is_email_confirmed. Я следовал этому https://docs.djangoproject.com/en/4.1/topics/auth/customizing/#extending-the-existing-user-model.
Я хочу, чтобы UserWithConfirmation создавался для каждого нового пользователя при его сохранении. На данный момент у меня есть что-то вроде этого.
from django.db import models
from django.contrib.auth.models import User
class UserWithConfirmation(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="user_with_confirmation")
is_email_confirmed = models.BooleanField(default=False)
def __str__(self):
return self.user.username
class User:
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
create_user_with_confirmation(User)
def create_user_with_confirmation(user):
UserWithConfirmation(user=user)
UserWithConfirmation.save()
Как сделать так, чтобы это работало?
Просто пусть UserWithConfirmation расширяет User
class UserWithConfirmation(User):
is_email_confirmed = models.BooleanField(default=False)
и изменить запись при подтверждении электронной почты
Я решил свою проблему с помощью сигналов Я изменил UserWithConfirmation на Profile
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
is_email_confirmed = models.BooleanField(default=False)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()