Ловушка-22 при попытке создать двусторонние отношения в Django

Я хочу позволить моим пользователям иметь возможность выбора аватаров и (что очень важно) заставить каждого пользователя иметь один, который будет использоваться в качестве основного.

В связи с этим у меня есть следующие (слегка урезанные) модели:-

class Avatar(models.Model):
    user = models.ForeignKey(User, related_name="avatars", on_delete=models.CASCADE)
    image = models.ImageField()


class User(AbstractUser):
    avatar = models.OneToOneField(Avatar, related_name="+", on_delete=models.CASCADE)

Проблема в том, что теперь я не могу создать пользователя без предварительного создания аватара для этого пользователя. Но я не могу создать аватар без пользователя. Потратив целую вечность на изучение этого вопроса, я не могу понять, как я могу сделать это, не разрешив одному из этих отношений быть нулевым, что кажется неправильным.

Есть ли другой способ сделать это?

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

avatar = models.OneToOneField(Avatar, related_name="+", null=True, blank=True, on_delete=models.CASCADE)

Однако вы можете установить аватар по умолчанию для пользователя в OneToOnefield

default_object = YourAvatarObject    
avatar = models.OneToOneField(Avatar, related_name="+", default=Default_object, on_delete=models.CASCADE)
Вернуться на верх