Ловушка-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)