过滤器注释时 案例 与前金键



我有 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

我有查询集获取所有ServiceRequestServiceRequest.objects.all()

我的问题是:如果service!=102如何order_bypost_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

最新更新