Django:向后外键查询

标签 django django-views

我的模型:

class NewsItem(models.Model):
    title    = ...
    content  = ...

class Image(models.Model):
    newsItem = models.ForeignKey(NewsItem)
    url      = ....

我想显示 50 个 NewsItems 及其图像(每个 NewsItem 2-5 个图像)。 我可以只使用一两个查询吗?可以查询“backwars”相关信息吗?

我找到了一些关于它的信息,但不明白如何在模板中显示 _related 项目(在我的例子中,“向后”_related 项目是图像)。链接是http://blog.roseman.org.uk/2010/01/11/django-patterns-part-2-efficient-reverse-lookups/

文章发布于 2010 年 1 月 - 是否有更有效的方法?

最佳答案

这是一个可能更容易理解的示例(命名)。

感谢 Daniel Roseman 的 setdefault!我每天都在堆栈上学习一些东西。我一直在使用丑陋的 try/except block 来解决同样的问题。

查看:

newsitems = NewsItem.objects.all()[0:50]
related_images = Image.objects.filter(newsitem__in=newsitems)
newsitem_images_map = {}

for image in related_images:
    # start appending to a list keyed by the newsitem ID for all related images
    newsitem_images_map.setdefault(image.newsitem_id, []).append(image)

for newsitem in newsitems:
    # set an attribute on the newsitem that is the list created above
    newsitem.images = newsitem_images_map.get(newsitem.id)

    # this attribute is accessible from the template.

模板:

{% for newsitem in newsitems %}
    {{ newsitem.title }}
    {% for image in newsitem.images %}
        {{ image }}
    {% endfor %}
{% endfor %}

关于Django:向后外键查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6446549/

相关文章:

python - 如何将 Django REST 框架与具有外键默认值的模型一起使用?

python - django中如何实现搜索功能?

python - 保存多对多字段 Django 表单

python - 我想在我的简单 Django 项目中使用 Redis-Cache。我无法理解 Django 中的实现

python - Django 将 MySQL 查询转换为 Django 查询

Django 1.7 冲突模型

python - 如何验证 Django REST Framework 序列化程序中的所有相关字段都指定具有相同所有者的对象?

python - “问题”对象没有属性 'strip'

python - 如何在 Django 模板中经历两个循环

python - 以 Django 形式保存用户密码的散列版本不起作用