Запрос с использованием связанного имени в django
У меня есть две модели:
class User(models.Model):
email = models.EmailField()
name = models.CharField(max_length=255)
password = models.CharField(max_length=255)
class Profile(models.Model):
group = models.ForeignKey(User, related_name='profiles')
image = models.ForeignKey(Media, on_delete=models.CASCADE)
#more attributes
У меня есть id пользователя, и я хочу получить его изображение.
user = User.objects.get(id=id)
image = user.profiles.image
Выдается ошибка. Как я могу это сделать?
Заранее спасибо.
Причина ошибки заключается в том, что отношение User to Profile является отношением многие-к-одному, поэтому при вызове user.profiles
создается кверисет из множества объектов Profile, а не только один. Кверисет профилей не имеет атрибута image.
Вам нужно сделать одно из двух:
a) Извлеките один профиль из набора запросов профилей, например user.profiles.first()
- обратите внимание, что если у вас несколько профилей, это просто получит первый профиль из набора по порядку_by модели профиля
b) Установите связь пользователь/профиль как один к одному, а не как много к одному, используя models.OneToOneField
. Это позволит вам получить прямой доступ к профилю с помощью user.profile
Получив прямой доступ к объекту профиля, вы можете вызвать имеющийся у него атрибут изображения.