Как загрузить изображение из моделей 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 и получать первый элемент, если он существует

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