python - 如何统计与ListView中显示的项目相关的对象?

标签 python django listview django-views django-generic-views

我正在尝试使用 ListView 来显示我所有的城镇。

但是,我想显示每个城镇的居民人数。

模型.py

class Town(models.Model):
    name = models.CharField()

class Citizen(models.Model):
    name = models.CharField()
    town = models.ForeignKey(Town)

View .py

class TownView(ListView):
    model = Town
    def get_context_data(self, **kwargs):
        context = super(TownView, self).get_context_data(**kwargs)
        context['towns'] = Town.objects.all().prefetch_related('players')
        return context

这是行不通的,因为 prefetch_related 只有在城镇 View 中有玩家属性时才有效,也许是通过 manytomany 字段。

如何为每个城镇检索将外键设置为该城镇的公民数量?

此外,我的模板会是什么样子?目前,它看起来像这样:

模板

<table>
{% for town in open_towns %}
    <tr>
        <td><a href="/town/join/{{ town.slug }}/">{{ town.name }}</a></td>
        <td>population : {{ Player.objects.filter(town=town).count() }}</td>
    </tr>
{% endfor %}
</table>

但这显然也是错误的。

最佳答案

你真正需要的是注解。您完全可以在不覆盖任何方法的情况下执行此操作。

from django.db.models import Count

class TownView(ListView):
    queryset = Town.objects.all().annotate(citizen_count=Count('citizen'))

现在 object_list 中的每个元素都有一个 citizen_count 属性。

关于python - 如何统计与ListView中显示的项目相关的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25713542/

相关文章:

c# - 如何仅在单击按钮后才将 ListView 加载到表单中?

java - 我想要一个包含多个内容的数组列表的自定义 listView

python - 在 Python 中的 re.sub 中获取组匹配

python - 从变量函数输入中制作 Tkinter 标签句柄?

python - 以 Curl 格式导出 Scrapy 请求

javascript - 使用 Django + JavaScript 的服务器时钟

python - Django模板,如何制作一个选择了预定义值的下拉框?

python - cocos.layer 包在 PyDev 中被报告为不存在

Django 模块化测试

Android 操作栏菜单项