【问题标题】:Django get data from two tables, related data onlyDjango从两个表中获取数据,仅相关数据
【发布时间】:2016-04-05 02:25:51
【问题描述】:

好的,所以我有一个显示图像的主页。这是从我的图像表中访问的。它包含所有者的一列,以用户 ID 的形式。我还有一张提交这些图片的用户表。如何使它在显示图像时使用 ID 从用户表中获取用户名?

views.py:

def index(request):
    context = {}
    populateContext(request, context)
    context.update(gallery=ImageDoc.objects.only('thumbfile').order_by('-id'))

    return render(request, 'register/index.html', context)

所以在 index.html 页面中,我可以遍历“图库”以显示图像。像这样:

{% for image in gallery %}
    <a href="/logo/{{ image.slug }}">
        <img src="{{ MEDIA_URL }}{{ image.largethumbfile }}">
        {{ image.title }} by {{ image.username }} for {{ image.price }}
    </a>
{% endfor %}

"image.username" 显然不起作用。我知道我需要通过以下方式访问 users 表:

get_users = User.objects.get()

并将抓取图像数据重新格式化为:

get_images = ImageDoc.objects.get()

但我不知道确保数据匹配的下一步。有任何想法吗?谢谢!

【问题讨论】:

  • {{ image.owner.username }} 不起作用?
  • 试过了,没用。
  • 如果您的模型对所有者使用外键,您应该能够访问它,但我通常不使用上下文更新路由,我更喜欢使用 render_to_response 并通过它传递我的查询。而且您必须在 {{ images.owner }} 上使用外键的名称
  • 啊,是的,看来我有三张桌子。 images 表归 userprofile 表所有,而 userprofile 表又归 user 表所有。所以我用这个 {{ image.user.user.username }} 工作了!谢谢!
  • 太棒了!很高兴能帮上忙!

标签: django django-templates django-views


【解决方案1】:

如果Images 表有Users 表作为外键,那么每个Images 对象都会有一个user_id 参数。因此,如果您有一个名为 given_user_id 的值,您可以执行以下操作:

Images.objects.get(user_id=given_user_id)

如果您有 username 而不是 user_id,您可以执行以下操作:

Images.objects.get(user=User.objects.get(username=username))

很遗憾,您不能在模板块内执行查询。在将上下文对象传递给渲染函数之前,您需要进行任何查询。

【讨论】:

  • 感谢您的回答!这也应该有效。但是如果我没有“用户名”变量可以使用呢?在索引中,我只是列出了所有图像,而不管所有者是谁。
  • 理想情况下,每个图像都应该有一个与之关联的用户对象,对吧?您可能会创建一个 dict 对象,将图像映射到用户/用户名并将其添加到上下文对象。或者,您甚至可以尝试image.user.username,但不确定这是否能解决我的问题,但试一试。
猜你喜欢
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多