我有一个查询集,该查询集从以下模型中按客户端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
的表都是唯一的。
答案 0 :(得分:1)
您可以在Area
和prefetch_related
上使用QuerySet。
areas = Area.objects.prefetch_related('task_set')
for area in areas:
area_tasks = area.task_set.all()