Django 使用foregin键时的过滤器注释
我有两种型号:Django 使用foregin键时的过滤器注释,django,django-rest-framework,django-queryset,Django,Django Rest Framework,Django Queryset,我有两种型号: 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 =
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)
如果服务
有值102
,它将有一个或多个请求会话
我已设置queryset获取所有ServiceRequest
:ServiceRequest.objects.all()
我的问题是:如果服务,如何按发布时间订购=102
。如果service=102
我想按requestsession\u集合的最大post\u时间
订购
我尝试了annotate
,但我不知道如何在requestsession
中获得最大的post\u time
我的问题我尝试过:
queryset.annotate(时间过滤器=大小写)(
当(服务id=102,然后=('requestsession\u set\u post\u time')时,
默认值=值(“post_时间”),
输出字段=DateTimeField(),),)。按(“-time\u过滤器”)排序
When(service=102, then=Max('requestsession_set__post_time')),
请注意,我还将服务
替换为服务
,因为在您的示例中服务
只是一个整型字段
此外,它应该是default='post_time'
,不带值。请参见将then=Max('requestsession\u set\u post\u time')
更改为then=Max('requestsession\u post\u time')
,然后它就可以工作了。Django说,requestsession\u set
字段不被接受