说我有以下模型:
class Company(models.Model):
name = models.CharField(max_length=255)
class Unit(models.Model):
name = models.CharField(max_length=255)
status = models.CharField(max_length=255)
company = models.ForeignKey(Company)
我想获得所有公司的列表,以及他们的单位中有多少是“离线”的数量,以及在一个查询中有多少是“在线”。
我知道如何通过以下方式获取一个或另一个的列表:
offline = Company.objects.all().filter(unit__status="offline").annotate(offline_count=Count("unit"))
online = Company.objects.all().filter(unit__status="online").annotate(online_count=Count("unit"))
我希望能够访问生成的queryset对象,如:
companies[0].offline_count
companies[0].online_count
这可能吗?
答案 0 :(得分:1)
这就是你需要的:
https://pypi.python.org/pypi/django-aggregate-if/
from django.db.models import Q
from aggregate_if import Count, Sum
Company.objects.annotate(
online_count=Count('unit', only=Q(unit__status="online")),
offline_count=Count('unit', only=Q(unit__status="offline")),
)
答案 1 :(得分:1)
注意:django-aggregate-if被相同的功能取代为Django 1.8