我的模型:
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/