Django-filter: FilterSet a résolu le champ 'image' avec une recherche 'exacte' sur un type de champ non reconnu ImageField...

Créé le 24 juil. 2017  ·  11Commentaires  ·  Source: carltongibson/django-filter

Salut!
Je sais que ce problème a déjà été abordé ici , mais je ne trouve pas de solution appropriée.

J'ai un modèle avec une classe Store qui contient diverses informations sur différents magasins et comprend également un champ avec image = models.ImageField à afficher lors de la requête.

J'ai tout essayé à partir de la documentation, mais il semble ignorer mon exlude et aussi les champs pour lesquels je filtre

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

C'est ce que j'essaie de filtrer et cela continue de me lancer cette AssertionError, une idée de ce que je pourrais manquer? Dès que je commente la ligne d'image dans mon models.py cela fonctionne (mais cela montre tous les champs, pas seulement le nom et créé pour lesquels je filtrais. Tout pointeur serait apprécié.

Cordialement

Commentaire le plus utile

Salut @msbt - Je parierais que certaines informations ont été laissées ici. J'ai effectué un test rapide et le AssertionError mentionné n'a pas été augmenté. Comme vous pouvez le voir ci-dessous, aucun filtre pour les champs d'image n'a été créé.

```python

des modèles

à partir de modèles d'importation django.db

magasin de classe (modèles. Modèle):
nom = modèles.CharField(max_length=80)
créé = modèles.DateField()
image = modèles.ImageField()

filtres

importer django_filters

classe StoreFilter(django_filters.FilterSet):
méta classe :
modèle = magasin
exclure = ['image']
champs = {
'nom' : ['exact', 'contient'],
'créé' : ['exact', 'année__gt'],
}

sortie console

Dans [8] : StoreFilter.base_filters
Sortie[8] :
OrderedDict([('nom',),
('nom__contient',),
('créé',),
('créé__année__gt',)])
````

Pourriez-vous fournir le modèle complet et le code du filtre ? Sinon, un exemple distillé qui illustre le problème serait utile.

Tous les 11 commentaires

Salut @msbt - Je parierais que certaines informations ont été laissées ici. J'ai effectué un test rapide et le AssertionError mentionné n'a pas été augmenté. Comme vous pouvez le voir ci-dessous, aucun filtre pour les champs d'image n'a été créé.

```python

des modèles

à partir de modèles d'importation django.db

magasin de classe (modèles. Modèle):
nom = modèles.CharField(max_length=80)
créé = modèles.DateField()
image = modèles.ImageField()

filtres

importer django_filters

classe StoreFilter(django_filters.FilterSet):
méta classe :
modèle = magasin
exclure = ['image']
champs = {
'nom' : ['exact', 'contient'],
'créé' : ['exact', 'année__gt'],
}

sortie console

Dans [8] : StoreFilter.base_filters
Sortie[8] :
OrderedDict([('nom',),
('nom__contient',),
('créé',),
('créé__année__gt',)])
````

Pourriez-vous fournir le modèle complet et le code du filtre ? Sinon, un exemple distillé qui illustre le problème serait utile.

Hé, merci de m'avoir répondu ! Donnez-moi un peu plus de temps pour comprendre ce que j'ai pu faire de mal, ce serait embarrassant si c'était une erreur de débutant ;)

Salut @msbt - avez-vous déjà compris ce qui se passait, ou cela peut-il être fermé ?

Je n'ai pas le temps en ce moment, alors fermons-le et revoyons quand j'essaie à nouveau et que je reste bloqué ;)

@msbt Une idée sur ce problème ? J'ai le même

@georgezouq n'a pas peur, a abandonné le projet pour différentes raisons et n'a jamais trouvé de solution

Traceback s'il vous plaît. 😀

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 pouvez-vous jeter un œil

il ignorait mes remplacements puisque j'utilisais une vue générique. cela a temporairement résolu mon problème mais mon client me dérange dans la spécificité de ses filtres lol. Pourriez-vous examiner cela

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

champs, exclure, filter_overrides dans Meta ne résout pas cette erreur AssertionError , lorsque j'utilise FilterView + filter_class = MyFilterSet , je dois définir filter_fields sous la vue pour exclure les champs,
sinon def filter_for_field(cls, f, name, lookup_expr='exact') passera par tous les champs

Cette page vous a été utile?
0 / 5 - 0 notes