Советы, как лучше управлять созданием объекта, не являющегося нулевым, с помощью сигналов
Я оказался в такой ситуации:
В моделях:
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()
.