我正在尝试订购查询集,以便:
first
)设置为True的元素,其中,它们按创建日期排序first
属性设置为False的元素,在这些元素中,它们的创建日期也是相同的以下是模型的示例:
class A(models.Model):
first = models.BooleanField(blank=False, default=False)
class B(models.Model):
a = models.ForeignKey(A)
created = models.DateTimeField(auto_now_add=True)
查询集如下:
queryset = B.objects.all().order_by("-a__first", "-created")
但是,此窥探器无法完成工作。
我正在考虑的解决方案是使用两个不同的数据库调用(一个过滤a__first = True,另一个过滤a__first = False),然后对查询集结果求和。但我想了解是否有更好,更清洁的方法来解决此问题。
答案 0 :(得分:0)
尝试以下条件查询,可能会起作用
from django.db.models import Case, When
B.objects.annotate(
first_true=Case(
When(a__first=True, then=('created')),
default=None
),
first_false=Case(
When(a__first=False, then=('created')),
default=None
)
).order_by(
'-first_true',
'-first_false',
)