如何解决Django:按多级反向查找排序
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,)
我想获得 Products
的 execute_at
日期之前订购的所有 Task
。我怎样才能做到这一点?
是否可以使用单个查询来做到这一点?
一个产品可以有多个任务。但始终考虑较小的 execute_at
日期,即
最接近当前日期的日期。
解决方法
您可以通过 WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL))N(N)),Tally AS(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1 AS I
FROM N N1,N N2,N N3,N N4)
SELECT T.I,CHAR(T.I) AS C,ROW_NUMBER() OVER (ORDER BY CHAR(T.I)) AS S
FROM Tally T
ORDER BY C;
字段的最大值.annotate(…)
[Django-doc],然后使用以下命令排序:
created_at
您可以订购末尾没有相关 from django.db.models import Max
Products.objects.annotate(
last_task=Max('taskgroup__task__execute_at')
).order_by('-last_task')
的商品:
Task
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。