Django 使用计算字段进行ordering_fields



我正在使用Django和Django Rest Framework以及PostgreSQL。我需要在模型上创建一个计算字段,并且还需要按字段排序。 我想@property装饰器用于计算字段,但据我所知,我无法将此"字段"添加到ordering_fields数组中。我的问题是 - 正确的方法是什么?

应该是这样的(部分(:

模型-

class MyModelViewSet(models.Model):
due_date = models.DateField(null=True, blank=True)
final_due_date = models.DateField(null=True, blank=True)
@property
def due_date_diff(self):
if self.final_due_date:
return self.final_due_date - due_date
else:
return due_date - date.today()

在视图中,我想做这样的事情:

class MyModelViewSet(viewsets.ModelViewSet):
serializer_class = MyModelSerializer
ordering_fields = tuple(serializer_class.Meta.fields + due_date_diff)

您不能对这样的属性进行排序,但可以像这样批注 QuerySet:

def get_queryset(self):
date_diff = ExpressionWrapper(F('final_due_date') - F('due_date'), 
output_field=fields.DurationField())
return super(MyModelViewSet, self).get_queryset().annotate(due_date_diff = date_diff)

然后,您可以在该批注上对 QuerySet 进行排序。

相关内容

  • 没有找到相关文章

最新更新