我有 2 个模型:
class ServiceRequest(models.Model):
post_time = models.DateTimeField(default=timezone.now)
service = models.IntegerField(default=102)
class RequestSession(models.Model):
request = models.ForeignKey(ServiceRequest)
post_time = models.DateTimeField(default=timezone.now)
如果service
有值102
,它将有一个或多个RequestSession
。
我有查询集获取所有ServiceRequest
:ServiceRequest.objects.all()
我的问题是:如果service!=102
如何order_by
post_time
.如果service=102
我想要按requestsession_set
的最大post_time
排序?
我试过annotate
但我不知道如何在里面requestsession
获得最大的post_time
什么时候我的查询我试过:
queryset.annotate(time_filter=Case(
When(service_id=102, then=('requestsession_set__post_time')),
default=Value('post_time'),
output_field=DateTimeField(), ), ).order_by("-time_filter")
尝试:
When(service=102, then=Max('requestsession_set__post_time')),
请注意,我还service_id
替换为service
,因为在您的示例中service
只是一个IntegerField
。
另外,它应该是default='post_time'
,没有Value
.见 https://docs.djangoproject.com/en/2.2/ref/models/expressions/#value-expressions