使用django-filter,我有以下FilterSet:
class MyFilter(django_filters.FilterSet):
name = django_filters.CharFilter(name='full_name')
class Meta:
model = MyModel
fields = ['name',]
order_by_field = 'order'
order_by = ('name',)
如您所见,我已将该字段命名为full_name
,因此会在表的full_name
列上进行过滤。但是,一旦我将order_by
设置为name
,就会出现此错误:
无法将关键字'name'解析为字段。选择是:...
它使用?name=Jon%20Doe
进行过滤,但排序不起作用。可能是什么问题?
答案 0 :(得分:2)
根据Meta.order_by上的文档,您必须使用模型中的字段名称,而不是过滤器字段名称。在您的情况下,我只会使用模型上的full_name
:
class MyFilter(django_filters.FilterSet):
name = django_filters.CharFilter(name='full_name')
class Meta:
model = MyModel
fields = ['name',]
order_by_field = 'order'
order_by = ('full_name',)
如果您查看代码:https://github.com/alex/django-filter/blob/develop/django_filters/filterset.py#L326-L339,您将看到如果您声明了order_by字段,它将遍历表单字段(从模型生成),然后将该值用作参数to Query_by在QuerySet上。
如果有的话,文档应该更明确地说明这一事实。