Перезапись метода сохранения для автоматического создания записи в связанной таблице 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()
Вернуться на верх