Создание объекта модели при создании пользователя в Django, сбой ограничения UNIQUE
У меня эта модель:
class Family(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255, unique=False)
def __str__(self):
return self.name
class Meta:
ordering = ['name']
А также я использую эту функцию для создания объекта семьи при создании пользователя:
@receiver(models.signals.post_save, sender=User)
def user_created(sender, instance, created, **kwargs):
if created:
Family.objects.create(user=instance)
У меня есть пара вопросов:
- I am getting an
django.db.utils.IntegrityError: UNIQUE constraint failed: family_tree_family.nameerror, how to resolve it? - How to use the
**kwargsinuser_createdfunction. I create users usingcurl.
В попытке user_created добавить instance.family.save() после Family.objects.create(user=instance)
@receiver(models.signals.post_save, sender=User)
def user_created(sender, instance, created, **kwargs):
if created:
Family.objects.create(user=instance)
instance.family.save()
и попробуйте изменить поле пользователя в классе семьи, если это не сработает.
user = models.OneToOneField(User, on_delete=models.CASCADE)
Надеюсь, это поможет.
Во-первых, спасибо всем, кто помогал.
Мне удалось выяснить проблему, и она заключалась в том, что поле name в модели family должно быть уникальным. Даже если использовался атрибут unique=False. Следовательно, ответ заключается в автоматическом создании уникального name, не существующего ранее. Следовательно, я использовал instance.username, поскольку это значение всегда должно быть уникальным:
@receiver(models.signals.post_save, sender=User)
def user_created(sender, instance, created, **kwargs):
if created:
Family.objects.create(user=instance, name=instance.username)
Я хотел бы иметь лучшую альтернативу, кроме instance.username. Может быть, если бы я мог как-то использовать **kwargs.