Советы, как лучше управлять созданием объекта, не являющегося нулевым, с помощью сигналов

Я оказался в такой ситуации:

В моделях:

class Client(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    # other...

signals.py:

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Client.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
        instance.client.save()

Есть определенные поля класса Client, которые не могут быть нулевыми, и поэтому я получаю ошибки типа:

NOT NULL constraint failed: accounts_client.dob

Какое лучшее решение в этом случае?

Очевидный ответ - просто убедиться, что данные передаются в эти поля, чтобы ограничение non-null не сработало. Что касается того, как это сделать, самый простой способ - установить значение default для вашего поля - это значение по умолчанию не обязательно должно быть фиксированным, оно может принимать вызываемую функцию - однако, оно не будет иметь контекста создаваемого вами объекта. Для этого вам нужно переопределить метод save().

Вернуться на верх