Как создавать объекты с помощью метода save в классе User, который происходит от AbstractBaseUser?
Я реализую приложение магазина на Django. Я хочу создавать Klient или Producent каждый раз, когда создается объект User, выполняя команду: python manage.py createsuperuser.
Модели Klient и Producent имеют OneToOneField по отношению к User и они помечены как первичные ключи. Класс User происходит от AbstractBaseUser:
class User(AbstractBaseUser):
class Meta:
indexes = [
models.Index(fields=['imie',]),
models.Index(fields=['nazwisko',]),
models.Index(fields=['email',]),
models.Index(fields=['username',]),
]
id_user = models.AutoField(primary_key=True)
is_producent = models.BooleanField(default=False)
is_klient = models.BooleanField(default=False)
imie = models.CharField(max_length=50, verbose_name="imię", default="null")
nazwisko = models.CharField(max_length=50, default="null")
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=50)
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
# email will be used to login
USERNAME_FIELD = 'email'
# when register must have username
REQUIRED_FIELDS = ['username', 'imie', 'nazwisko', 'is_producent', 'is_klient']
objects = MyAccountManager()
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
def save(self, *args, **kwargs):
# self.pk will be None for instances that are going to be created
created = not self.pk
if created and self.is_producent == True:
print("Producent created")
Producent.objects.create(id_producenta=self.pk)
elif created and self.is_klient == True:
print("Klient created")
Klient.objects.create(id_klienta=self.pk)
super().save(*args, **kwargs)
Я хотел переопределить метод save в этой модели и создать там объекты, связанные с User, соответственно: если is_klient is true, то создать модель Klient. Если is_producent - true, то создать модель Producent. Однако я не могу даже запустить команду makemigrations, как будто изменения не были обнаружены.
Я также попробовал использовать другой подход, используя сигналы. Я разместил код в файле signals.py:
@receiver(post_save, sender=get_user_model())
def create_klient(sender, instance, created, **kwargs):
if created:
Klient.objects.create(id_klienta=instance)
Когда я выполнил команду createsuperuser, ничего не произошло.