Как загрузить изображение из моделей django
я хочу загрузить фотографию из модели. но получаю "<QuerySet [<Photo: ira>]>" кроме фотографии.
я пытался использовать photo.url, photo.image.url, photo.image, photo.image.image но это не работает
my templtate:
<div id="userInfo">
<img src="{{ photo.url }}" alt="{{ username }}">
<div id="statusAndName">
<h1>{{ username }}</h1>
<h3>{{ status }}</h3>
</div>
</div>
Мое мнение:
def UserPage(request,user_num):
user = User.objects.get(pk=user_num)
#get user info
username = user.username
posts = Post.objects.filter(user=user.id)
photo = Photo.objects.filter(user=user.id)
status = user.status
return render(
request,
'userpage.html',
context={'username': username, 'posts': posts, 'status': status, 'photo': photo},
)
мои модели:
class Photo(models.Model):
"""
A typical class defining a model, derived from the Model class.
"""
# Fields
user = models.OneToOneField('User', on_delete=models.SET_NULL, null=True, help_text="user's id")
photo = models.ImageField()
# Metadata
class Meta:
ordering = ["-user"]
def __str__(self):
"""
String for representing the MyModelName object (in Admin site etc.)
"""
return self.user.username
Я думаю, что проблема в том, что объект Photo
имеет подполе "фото".
Попробуйте следующее:
<div id="userInfo">
<img src="{{ photo.photo.url }}" alt="{{ username }}">
<div id="statusAndName">
<h1>{{ username }}</h1>
<h3>{{ status }}</h3>
</div>
</div>
Вы используете .filter
, который возвращает набор запросов. Поскольку у вас есть связь один к одному между пользователем и фотографией, для пользователя может быть только одна фотография, поэтому просто измените ее на
photo = Photo.objects.get(user=user.id)
, который должен вернуть объект photo
, если он существует. Как упомянул Пьетро, вам нужно будет использовать photo.photo.url
в вашем шаблоне.
Примечание, в зависимости от того, как вы хотите обрабатывать ошибки, когда фото не существует, вы можете либо обрабатывать ошибки DoesNotExist
, либо продолжать использовать .filter
и получать первый элемент, если он существует