django-filter order_by"无法解析关键字' name'进入领域"

时间:2014-11-28 06:34:11

标签: python django django-filter

使用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进行过滤,但排序不起作用。可能是什么问题?

1 个答案:

答案 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上。

如果有的话,文档应该更明确地说明这一事实。