Skip to main content
 首页 » 编程设计

python之Django 按属性字段排序

2025年02月15日19www_RR

我正在使用“OrderingFilter”来进行排序。 根据 Django 文档,当未指定“ordering_fields”时,您可以按 View 序列化程序中提到的任何字段进行排序。我有一个字段,它基本上是序列化程序中的一个@property 字段。但是当尝试按该字段排序时,出现以下错误:

Cannot resolve keyword 'spec_identifier' into field. Choices are:.... 

这是模型 View 的一部分:

class ItemViewSet(BaseViewMixin, MyModelView): 
    permission_classes = [MyItemViewPermissions] 
    serializer_class = ItemSerializer 
    filter_backends = (ItemFilter, OrderingFilter,) 

这是我要订购的属性定义:

@property 
def spec_identifier(self): 
    return self.spec.identifier if self.spec else None 

是否可以通过它订购?

请您参考如下方法:

因此,经过研究和反复试验,这就是解决方案:

ordering_fields = tuple(serializer_class.Meta.fields + ['spec__identifier'])