视图中的Django外键 - 获取列表中每个用户显示的第一个图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视图中的Django外键 - 获取列表中每个用户显示的第一个图像相关的知识,希望对你有一定的参考价值。

我正在尝试让我的仪表板显示您所在区域的用户列表。这到目前为止工作,但我不能得到用户的第一个图像显示。我得到的当前错误消息是“'QuerySet'对象没有属性'id'”

models.朋友

class Images(models.Model):
    image = models.ImageField(upload_to='profile_image', null=True, default='profile_image/none/no-img.png')
    user = models.ForeignKey(User, on_delete=models.CASCADE,  null=False)

views.朋友

class DashboardView(TemplateView):

    template_name = 've/cp/dashboard.html'

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(DashboardView, self).dispatch(*args, **kwargs)


    def get(self, request, pk=None):
        users = User.objects.exclude(id=request.user.id)
        user = User.objects.filter(pk=pk)
        try:
            favorite = Favorite.objects.get(current_user=request.user)
            favorites = favorite.users.all()
        except Favorite.DoesNotExist:
            favorites = None

        args = {
            'users': users, 'favorites':favorites, 'images': Images.objects.filter(user_id=user.id)
        }

        return render(request, self.template_name, args)

dashboard.html

        <h2>People near you</h2>
        {% for user in users %}
            <a href="{% url 've:view_profile_with_pk' pk=user.pk %}">
                <h4>{{ user.username }}</h4>
                <p>{{ user.images }}</p>

            {% if images %}

                {% for img in images %}
                <a href="{{ img.image.url }}" target="_blank">
                <img src="{{ img.image.url }}" class="" style="max-width: 300px">
                </a>
                {% endfor %}
            {% else %}

            <p>No images</p>
            {% endif %}

            </a>

            {% if not user in favorites %}
            <a href="{% url 've:change_favorites' operation='add' pk=user.pk %}">
            <button type="button" class="btn btn-success">Add Favorite</button>
            </a>
            {% endif %}
        {% endfor %}
答案

qazxsw poi返回查询集。当你稍后尝试qazxsw poi时会引发错误。您需要使用user = User.objects.filter(pk=pk)方法在queryset中获取第一个对象:

Images.objects.filter(user_id=user.id)

或者使用first()代替:

user = User.objects.filter(pk=pk).first()

但如果提供id的用户不存在,则第二个选项会引发get错误。要处理此错误,您可以使用user = User.objects.get(pk=pk) ,在ID错误的情况下返回页面:

DoesNotExist

以上是关于视图中的Django外键 - 获取列表中每个用户显示的第一个图像的主要内容,如果未能解决你的问题,请参考以下文章

从 SwiftUI 列表中的每个元素获取用户输入

Django - 夹具中的外键

如何在模板中显示具有外键关系的元素?

Scaffold Rails 3 视图中的外键下拉列表

如何使用 Django 模型在 ExtJS 网格中获取外键值而不是键?

如何在 django admin change_form 中更改外键字段的顺序