我有一个查询集,它从以下模型返回客户端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
的唯一表。
您可以在Area
上使用prefetch_related
的QuerySet。
areas = Area.objects.prefetch_related('task_set')
for area in areas:
area_tasks = area.task_set.all()