python – django-filter order_by“无法将关键字’name’解析为字段”

使用
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,它就会给我这个错误:

Cannot resolve keyword ‘name’ into field. Choices are: …

它使用?name = Jon Doe进行过滤,但排序不起作用.可能是什么问题呢?

最佳答案 根据
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字段,它将遍历表单字段(从模型生成),然后将该值用作QuerySet上order_by的参数.

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

点赞