我有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
。
我有queryset获取所有ServiceRequest
:ServiceRequest.objects.all()
我的问题是:如果order_by
,如何post_time
service!=102
。如果service=102
我想按post_time
中最大的requestsession_set
排序?
我尝试过annotate
,但我不知道何时才能在post_time
内获得最大的requestsession
我尝试过查询:
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")
答案 0 :(得分:0)
尝试:
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