Django-filter: FilterSet resolvió el campo 'imagen' con búsqueda 'exacta' a un tipo de campo no reconocido ImageField...

Creado en 24 jul. 2017  ·  11Comentarios  ·  Fuente: carltongibson/django-filter

¡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

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.

Todos 11 comentarios

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.

¡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

¿Fue útil esta página
0 / 5 - 0 calificaciones