你好呀!
我知道这个问题已经在这里解决了,但是我找不到合适的解决方案。
我有一个带有 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',
````
你能提供完整的型号和过滤器代码吗? 如果不是,那么一个演示该问题的提炼示例将很有帮助。
嘿,谢谢你回复我! 给我多一点时间来弄清楚我可能做错了什么,如果这是一个菜鸟的错误会很尴尬;)
嗨@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')
将遍历所有字段
最有用的评论
嗨@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',
````
你能提供完整的型号和过滤器代码吗? 如果不是,那么一个演示该问题的提炼示例将很有帮助。