按列值分组查询集

时间:2019-04-24 19:43:02

标签: python django django-orm

我有一个查询集,该查询集从以下模型中按客户端ID返回Tasks,并希望获得更多过滤器以接收更精确的数据。模型只是我要实现的示例结构:

class Client(models.Model):
    name = models.CharField(max_length=255)
    def __str__(self):
        return self.name
class Office(models.Model):
    name = models.CharField(max_length=255)
    clientid = models.ForeignKey(Client, db_constraint=False, db_index=False, on_delete=models.DO_NOTHING)
    def __str__(self):
        return self.name
class Area(models.Model):
    name = models.CharField(max_length=255)
    officeid = models.ForeignKey(Office, db_constraint=False, db_index=False, on_delete=models.DO_NOTHING)
    def __str__(self):
        return self.name
class Task(models.Model):
    name = models.CharField(max_length=255)
    areaid = models.ForeignKey(Area, db_constraint=False, db_index=False, on_delete=models.DO_NOTHING)

我正在使用的查询:Task.objects.filter(areaid__officeid__clientid='1') 它返回长查询集,我需要按areaid进行分组。通过分组,我的意思是接收例如仅包含单个areaid任务的少数查询集列表。是否有可能通过Django Orm实现此功能而无需遍历我已经拥有的queryset?我需要它来在jinja2中呈现不同的表,每个areaid的表都是唯一的。

1 个答案:

答案 0 :(得分:1)

您可以在Areaprefetch_related上使用QuerySet。

areas = Area.objects.prefetch_related('task_set')
for area in areas:
    area_tasks = area.task_set.all()
相关问题