Django-filter: FilterSet 使用“精确”查找将字段“图像”解析为无法识别的字段类型 ImageField...

创建于 2017-07-24  ·  11评论  ·  资料来源: carltongibson/django-filter

你好呀!
我知道这个问题已经在这里解决了,但是我找不到合适的解决方案。

我有一个带有 Store 类的模型,其中包含有关不同商店的各种信息,还包括一个带有 image = models.ImageField 的字段,以便在查询时显示。

我尝试了文档中的所有内容,但它似乎忽略了我的排除以及我正在过滤的字段

class StoreFilter(django_filters.FilterSet):
    class Meta:
        model = Store
        exclude = ['image']
        fields = {
            'name': ['exact', 'contains'],
            'created': ['exact', 'year__gt'],
        }

这就是我要过滤的内容,它不断向我抛出 AssertionError,知道我可能遗漏了什么吗? 一旦我在我的 models.py 中评论图像行,它就可以工作(但它会显示所有字段,不仅是我正在过滤的名称和创建的字段。任何指针都将不胜感激。

最好的祝福

最有用的评论

@msbt - 我敢打赌这里遗漏了一些信息。 我进行了快速测试,没有提出提到的AssertionError 。 正如您在下面看到的,没有为图像字段创建过滤器。

```蟒蛇

楷模

从 django.db 导入模型

类商店(模型。模型):
名称 = models.CharField(max_length=80)
创建 = 模型.DateField()
图像 = 模型.ImageField()

过滤器

导入 django_filters

类 StoreFilter(django_filters.FilterSet):
元类:
型号 = 商店
排除 = ['图像']
字段 = {
'名称':['确切','包含'],
'创建':['精确','year__gt'],
}

控制台输出

[8] 中:StoreFilter.base_filters
输出[8]:
OrderedDict([('name',),
('name__contains',),
('创建',),
('创建__year__gt',)])
````

你能提供完整的型号和过滤器代码吗? 如果不是,那么一个演示该问题的提炼示例将很有帮助。

所有11条评论

@msbt - 我敢打赌这里遗漏了一些信息。 我进行了快速测试,没有提出提到的AssertionError 。 正如您在下面看到的,没有为图像字段创建过滤器。

```蟒蛇

楷模

从 django.db 导入模型

类商店(模型。模型):
名称 = models.CharField(max_length=80)
创建 = 模型.DateField()
图像 = 模型.ImageField()

过滤器

导入 django_filters

类 StoreFilter(django_filters.FilterSet):
元类:
型号 = 商店
排除 = ['图像']
字段 = {
'名称':['确切','包含'],
'创建':['精确','year__gt'],
}

控制台输出

[8] 中:StoreFilter.base_filters
输出[8]:
OrderedDict([('name',),
('name__contains',),
('创建',),
('创建__year__gt',)])
````

你能提供完整的型号和过滤器代码吗? 如果不是,那么一个演示该问题的提炼示例将很有帮助。

嘿,谢谢你回复我! 给我多一点时间来弄清楚我可能做错了什么,如果这是一个菜鸟的错误会很尴尬;)

@msbt - 你有没有弄清楚发生了什么,或者这可以关闭吗?

我现在没有时间,所以让我们关闭它并在我再次尝试并卡住时重新访问;)

@msbt关于这个问题的任何想法? 我有同样的

@georgezouq不怕,因为不同的原因放弃了这个项目,从来没有找到解决方案

请追溯。 😀

Internal Server Error: /stadiums/
Traceback (most recent call last):
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django\views\generic\base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\*\PycharmProjects\pina_colada\venv\lib\site-packages\django\views\generic\base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\*\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\views.py", line 77, in get
    filterset_class = self.get_filterset_class()
  File "C:\Users\*\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\views.py", line 35, in get_filterset_class
    return filterset_factory(model=self.model, fields=self.filterset_fields)
  File "C:\Users\*\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\filterset.py", line 459, in filterset_factory
    (FilterSet,), {'Meta': meta})
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\filterset.py", line 71, in __new__
    new_class.base_filters = new_class.get_filters()
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\filterset.py", line 345, in get_filters
    filters[filter_name] = cls.filter_for_field(field, field_name, lookup_expr)
  File "C:\Users\default_user\PycharmProjects\pina_colada\venv\lib\site-packages\django_filters\filterset.py", line 377, in filter_for_field
    ) % (cls.__name__, field_name, lookup_expr, field.__class__.__name__)
AssertionError: StadiumFilterSet resolved field 'graphic' with 'exact' lookup to an unrecognized field type FileField. Try adding an override to 'Meta.filter_overrides'. See: https://django-filter.readthedocs.io/en/master/ref/filterset.html#customise-filter-generation-with-filter-overrides
[13/Dec/2018 08:23:58] "GET /stadiums/?page=1 HTTP/1.1" 500 108150
class StadiumFilter(django_filters.FilterSet):
    name = django_filters.CharFilter(lookup_expr='iexact')

    class Meta:
        model = Stadium
        exclude = ['graphic']
        filter_overrides = {
            models.FileField: {
                'filter_class': django_filters,
                'extra': lambda f: {
                    'lookup_expr': 'icontains',
                },
            },
        }

@carltongibson你可以看看

因为我使用的是通用视图,所以它忽略了我的覆盖。 这暂时解决了我的问题,但我的客户在他的过滤器的特殊性上打扰了我哈哈。 你能调查一下吗

urlpatterns = [
    path('', views.StadiumFilterView.as_view(model=Stadium,
                                             filterset_fields=['name', 'country']), name="stadium_index"),
]

fields, exclude, filter_overrides 在 Meta 不能解决这个AssertionError错误,当我使用FilterView + filter_class = MyFilterSet时,我必须在视图下设置 filter_fields 以排除字段,
否则def filter_for_field(cls, f, name, lookup_expr='exact')将遍历所有字段

此页面是否有帮助?
0 / 5 - 0 等级