我正在使用'OrderingFilter'来允许订购。 根据Django文档,当不指定'ordering_fields'时,您可以按视图序列化程序中提到的任何字段进行排序。我有一个字段,它基本上是序列化程序中的@property字段。但是当尝试按该字段排序时,我收到以下错误:
Cannot resolve keyword 'spec_identifier' into field. Choices are:....
这是模型视图的一部分:
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
可以通过它订购吗?
答案 0 :(得分:1)
因此,经过研究和反复试验,这就是解决方案:
ordering_fields = tuple(serializer_class.Meta.fields + ['spec__identifier'])
答案 1 :(得分:0)
您可以订购并获取价值属性, 但您可以按相关字段订购,例如
Item.objects.all().order_by('spec__identifier')
答案 2 :(得分:0)
请尝试以下代码。
class ItemViewSet(BaseViewMixin, MyModelView):
permission_classes = [MyItemViewPermissions]
serializer_class = ItemSerializer
filter_backends = (ItemFilter, OrderingFilter,)
ordering_fields = ('spec__identifier',)