过滤注释案例时使用前键

时间:2019-09-16 04:27:08

标签: django django-rest-framework django-queryset

我有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获取所有ServiceRequestServiceRequest.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")

1 个答案:

答案 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