¡Hola!
Sé que este problema ya se ha abordado aquí , pero simplemente no puedo encontrar una solución adecuada.
Tengo un modelo con una clase Store que contiene información diversa sobre diferentes tiendas e incluye también un campo con image = models.ImageField para mostrar cuando se consulta.
Intenté todo desde los documentos, pero parece estar ignorando mi exclusión y también los campos que estoy filtrando
class StoreFilter(django_filters.FilterSet):
class Meta:
model = Store
exclude = ['image']
fields = {
'name': ['exact', 'contains'],
'created': ['exact', 'year__gt'],
}
Esto es lo que estoy tratando de filtrar y me sigue arrojando AssertionError, ¿alguna idea de lo que me podría estar perdiendo? Tan pronto como comento la línea de la imagen en mi models.py, funciona (pero muestra todos los campos, no solo el nombre y la creación que estaba filtrando. Cualquier sugerencia sería apreciada.
Atentamente
Hola, @msbt . Apuesto a que se ha dejado algo de información aquí. Realicé una prueba rápida y no se generó el AssertionError
mencionado. Como puede ver a continuación, no se creó ningún filtro para los campos de imagen.
```pitón
desde modelos de importación django.db
Tienda de clase (modelos.Modelo):
nombre = modelos.CharField(max_length=80)
creado = modelos.DateField()
imagen = modelos.ImageField()
importar django_filters
clase StoreFilter(django_filters.FilterSet):
metaclase:
modelo = Tienda
excluir = ['imagen']
campos = {
'nombre': ['exacto', 'contiene'],
'creado': ['exacto', 'año__gt'],
}
En [8]: StoreFilter.base_filters
Fuera[8]:
OrderedDict([('nombre',
('nombre__contiene',
('creado',
('creado__año__gt',
````
¿Podría proporcionar el modelo completo y el código de filtro? De lo contrario, sería útil un ejemplo destilado que demuestre el problema.
¡Oye, gracias por volver a contactarme! Dame un poco más de tiempo para descubrir qué podría haber hecho mal, sería vergonzoso si fuera un error de novato;)
Hola, @msbt : ¿alguna vez te diste cuenta de lo que estaba pasando o se puede cerrar?
No tengo tiempo en este momento, así que cerrémoslo y volvamos a visitarlo cuando lo intente de nuevo y me quede atascado;)
@msbt ¿ Alguna idea sobre este problema? yo tengo el mismo
@georgezouq no tiene miedo, abandonó el proyecto por diferentes razones y nunca encontró una solución
Rastreo por favor. 😀
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 , ¿puedes echar un vistazo?
estaba ignorando mis anulaciones ya que estaba usando una vista genérica. esto ha resuelto temporalmente mi problema, pero mi cliente me está molestando con la especificidad de sus filtros jajaja. ¿Podrías investigar esto?
urlpatterns = [
path('', views.StadiumFilterView.as_view(model=Stadium,
filterset_fields=['name', 'country']), name="stadium_index"),
]
campos, excluir, filter_overrides en Meta no resuelve este error AssertionError
, cuando uso FilterView
+ filter_class = MyFilterSet
, tengo que configurar filter_fields bajo la vista para excluir campos,
de lo contrario def filter_for_field(cls, f, name, lookup_expr='exact')
se ejecutará en todos los campos
Comentario más útil
Hola, @msbt . Apuesto a que se ha dejado algo de información aquí. Realicé una prueba rápida y no se generó el
AssertionError
mencionado. Como puede ver a continuación, no se creó ningún filtro para los campos de imagen.```pitón
modelos
desde modelos de importación django.db
Tienda de clase (modelos.Modelo):
nombre = modelos.CharField(max_length=80)
creado = modelos.DateField()
imagen = modelos.ImageField()
filtros
importar django_filters
clase StoreFilter(django_filters.FilterSet):
metaclase:
modelo = Tienda
excluir = ['imagen']
campos = {
'nombre': ['exacto', 'contiene'],
'creado': ['exacto', 'año__gt'],
}
salida de la consola
En [8]: StoreFilter.base_filters),),),)])
Fuera[8]:
OrderedDict([('nombre',
('nombre__contiene',
('creado',
('creado__año__gt',
````
¿Podría proporcionar el modelo completo y el código de filtro? De lo contrario, sería útil un ejemplo destilado que demuestre el problema.