Создание объекта модели при создании пользователя в 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)

У меня есть пара вопросов:

  1. I am getting an django.db.utils.IntegrityError: UNIQUE constraint failed: family_tree_family.name error, how to resolve it?
  2. How to use the **kwargs in user_created function. I create users using curl.

В попытке 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.

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