使用
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的参数.
如果有的话,文档应该更明确地说明这一事实.