如何解决Django:订单集查询
我有以下 3 个模型
class Product(models.Model):
name = models.CharField(
blank=False,max_length=256
)
class TaskGroup(models.Model):
name = models.CharField(
blank=False,max_length=256
)
product = models.ForeignKey(
Product,on_delete=models.CASCADE,null=False,blank=True
)
class Task(models.Model):
name = models.CharField(
blank=False,max_length=256
)
task_group = models.ForeignKey(
TaskGroup,blank=True
)
execute_at = models.DateField(
blank=True
null=True,)
我想获取产品的任务组并通过 execute_at 为每个任务组排序任务。 我可以通过
获取所有任务组和产品的所有任务product = Product.objects.first()
task_groups = product.taskgroup_set.all()
task_groups
包含所有组和每个组的所有任务。
我也可以做一些类似 task_groups[0].task_set.all().order_by('execute_at')
的事情。
我不知道如何将这些查询放在一起,并在单个查询中按 execute_at
对每个组的任务进行排序。
解决方法
您可以使用 Prefetch() objects 并为预取对象指定查询集(这也可以提高效率,因为将对数据库进行较少的查询):
from django.db.models import Prefetch
product = Product.objects.filter(pk=some_pk).prefetch_related(
Prefetch(
'taskgroup_set__task_set',queryset=Task.objects.order_by('execute_at')
)
).get() # Change `.filter(pk=some_pk)` as per your implementation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。