繁体   English   中英

在嵌套循环中重写listview中的get_queryset方法

[英]Override get_queryset method in listview for nested cycles

即时通讯试图在相同的模板中呈现3个排名。 我的意思是,我有三个城市,每个城市的照片太多(前三张照片得票最多,但这是另一个问题)。

我的模特:

class City(models.Model):
    city = models.CharField(max_length=100)

    def __unicode__(self):
        return self.city

    class Meta():
        verbose_name_plural = "Cities"

class School(models.Model):
    name = models.CharField(max_length=100)
    city = models.ForeignKey(City)


    def __unicode__(self):
        return self.name

    class Meta():
        verbose_name_plural = "Schools"

class Album(models.Model):
    name = models.CharField(max_length=100)
    school = models.ForeignKey(School)

    def __unicode__(self):
        return str(self.name)

    class Meta():
        verbose_name_plural = "Albums"

class Photo(models.Model):
    school = models.ForeignKey(School)
    photo = models.ImageField(upload_to='fotos')
    votes = models.IntegerField(default=0)

    def __unicode__(self):
        return str(self.photo)

    class Meta():
        verbose_name_plural = "Photos"

这是我的看法。 我知道我需要覆盖get_queryset,即时通讯正在尝试,但我无法投入使用:

class RankingPhotosView(ListView):
    model = Photo
    template_name = 'ranking.html'

换句话说,我需要在模板中进行渲染,例如:

Bogotá:
Foto1
Foto2
Foto3

New York:
Foto4
Foto5
Foto6

London:
Foto7
Foto8
Foto9

就像是:

Photo.objects.filter(school__city__id=some_id_here)

结果将为您提供给定城市的照片。

class RankingPhotosView(TemplateView):
    template_name = 'ranking.html'

    def get_context_data(self, **kwargs):
        context = super(RankingPhotosView, self).get_context_data(**kwargs)
        temp = {}
        for city in City.objects.all():
            temp[city.name] = Photo.objects.filter(school__city__id=city.id)
        context['results'] = temp

现在在您的模板中:

{% for key, value in results %}
    {{ key }}
    {% for photo in value %}
        - {{ photo }}
    {% endfor %}
{% endfor %}

我尚未测试此代码,因此无法一劳永逸地工作(特别是模板部分),但它应该可以帮助您入门。 如果您发现问题,请发表评论,以便我编辑答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM