按列值对查询集进行分组

问题描述 投票:0回答:1

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

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实现这一点而不通过我已经拥有的查询集循环?我需要这个在jinja2中呈现不同的表,每个areaid的唯一表。

python django django-orm
1个回答
1
投票

您可以在Area上使用prefetch_related的QuerySet。

areas = Area.objects.prefetch_related('task_set')
for area in areas:
    area_tasks = area.task_set.all()
© www.soinside.com 2019 - 2024. All rights reserved.