ForeignKey和Django模板

ForeignKey和Django模板,django,templates,collections,Django,Templates,Collections,这就是问题所在。想象两个模型:摄影师和照片。严格的规定是,图片只能有一个摄影师,所以在照片中有一个指向摄影师的外键链接 class Photographer(models.Model): name = models.CharField(max_length = 40) class Photo(models.Model): name = models.CharField(max_length = 40) photographer = models.ForeignKey(

这就是问题所在。想象两个模型:摄影师和照片。严格的规定是,图片只能有一个摄影师,所以在照片中有一个指向摄影师的外键链接


class Photographer(models.Model):
    name = models.CharField(max_length = 40)

class Photo(models.Model):
    name = models.CharField(max_length = 40)
    photographer = models.ForeignKey(Photographer)
现在我想在主页上展示最著名的摄影师,其中有3张最受欢迎的照片。所以应该是这样的:


# views.py
def main(request):
    photographers = ...
    return render_to_response("main_page.html", {
                "photographers": photographers
           })

#main_page.html
{% for photo in photographers.photo_set.all()[:3] %}
{{ photo.name }}
{% endfor %}
但Django模板系统不允许all()和[:3]。那么最好的方法是什么呢?最明显的解决方案是动态创建对象(从摄影师和照片创建阵列并将其传递给模板),但我认为这不是一个好方法


请不要只是让我参考Django手册,我仔细阅读了它,但找不到答案…

你得到了它,你只需要将逻辑移到视图中,并在得到对象后将其传递给模板

# views.py
def main(request):
    photographers = photographers.photo_set.all()[:3]
    return render_to_response("main_page.html", {
                "photographers": photographers
           })

#main_page.html
{% for photo in photographers %}
{{ photo.name }}
{% endfor %}
确保视图包含逻辑,模板仅显示数据。

尝试使用:


请注意,
.all
不需要显式调用。

我认为Yuval A几乎做到了,但不完全做到——照片和摄影师似乎混淆了。我认为最好的方法是在
摄影师
模型上提供一个
top\u photos
属性,返回前3张(或任意多张)照片。然后:

{% for photographer in photographers %} Photographer: {% photographer.name %} Top Photos: {% for photo in photographer.top_photos %} {% photo.name} {% endfor %} {% endfor %} {摄影师中摄影师的百分比%} 摄影师:{%摄影师.name%} 热门照片: {%用于摄影师中的照片。top_photos%} {%photo.name} {%endfor%} {%endfor%}
我在上面遗漏了任何HTML格式,但希望意图是明确的。

是的,但我还需要在页面上显示摄影师的姓名。。。所以它会像“摄影师约翰·雷恩,照片:照片1,照片2,照片3”这样的smth。这很有效,太棒了!事实上,我自己也找到了一个更通用的方法:添加一个方法来获取照片(self),它只返回self。photo_set.all()[:3]并添加一个属性top_3_photos=property(get_top3photos),以便在模板中我可以引用这个新属性{%forphoto in photo.top_3_photos%}是的,将所选内容移出模板是最好的选择。把它放到视图或模板标签中。我刚刚添加了一个答案,实际上或多或少就是你在评论中所说的:-) {% for photographer in photographers %} Photographer: {% photographer.name %} Top Photos: {% for photo in photographer.top_photos %} {% photo.name} {% endfor %} {% endfor %}