Django-filter: FilterSet aufgelöstes Feld 'Bild' mit 'exakter' Suche auf einen unbekannten Feldtyp ImageField...

Erstellt am 24. Juli 2017  ·  11Kommentare  ·  Quelle: carltongibson/django-filter

Hi!
Ich weiß, dass dieses Problem hier schon angesprochen wurde, aber ich finde einfach keine richtige Lösung.

Ich habe ein Modell mit einer Store-Klasse, die verschiedene Informationen zu verschiedenen Geschäften enthält und auch ein Feld mit image = models.ImageField enthält, das bei der Abfrage angezeigt wird.

Ich habe alles aus den Dokumenten ausprobiert, aber es scheint mein Exlude und auch die Felder, nach denen ich filtere, zu ignorieren

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

Das ist es, wonach ich versuche zu filtern, und es wirft mir immer wieder diesen AssertionError zu. Haben Sie eine Idee, was mir fehlen könnte? Sobald ich die Bildzeile in meiner models.py kommentiere, funktioniert es (aber es zeigt alle Felder, nicht nur Name und erstellt, nach denen ich gefiltert habe. Alle Hinweise wären willkommen.

Mit freundlichen Grüßen

Hilfreichster Kommentar

Hallo @msbt - Ich würde wetten, dass hier einige Informationen ausgelassen wurden. Ich habe einen Schnelltest durchgeführt, und das erwähnte AssertionError wurde nicht ausgelöst. Wie Sie unten sehen können, wurde kein Filter für die Bildfelder erstellt.

„Python

Modelle

von django.db importiere Modelle

Klasse Store(models.Model):
Name = Modelle.CharField(max_length=80)
erstellt = Modelle.DateField()
Bild = Modelle.ImageField()

Filter

importiere django_filters

Klasse StoreFilter(django_filters.FilterSet):
Klasse Meta:
Modell = Geschäft
ausschließen = ['Bild']
Felder = {
'name': ['exakt', 'enthält'],
'erstellt': ['exakt', 'year__gt'],
}

Konsolenausgabe

In [8]: StoreFilter.base_filters
Aus[8]:
OrderedDict([('name',),
('name__enthält',),
('erstellt',),
('erstellt__Jahr__gt',)])
````

Könnten Sie den vollständigen Modell- und Filtercode angeben? Wenn nicht, wäre ein destilliertes Beispiel hilfreich, das das Problem demonstriert.

Alle 11 Kommentare

Hallo @msbt - Ich würde wetten, dass hier einige Informationen ausgelassen wurden. Ich habe einen Schnelltest durchgeführt, und das erwähnte AssertionError wurde nicht ausgelöst. Wie Sie unten sehen können, wurde kein Filter für die Bildfelder erstellt.

„Python

Modelle

von django.db importiere Modelle

Klasse Store(models.Model):
Name = Modelle.CharField(max_length=80)
erstellt = Modelle.DateField()
Bild = Modelle.ImageField()

Filter

importiere django_filters

Klasse StoreFilter(django_filters.FilterSet):
Klasse Meta:
Modell = Geschäft
ausschließen = ['Bild']
Felder = {
'name': ['exakt', 'enthält'],
'erstellt': ['exakt', 'year__gt'],
}

Konsolenausgabe

In [8]: StoreFilter.base_filters
Aus[8]:
OrderedDict([('name',),
('name__enthält',),
('erstellt',),
('erstellt__Jahr__gt',)])
````

Könnten Sie den vollständigen Modell- und Filtercode angeben? Wenn nicht, wäre ein destilliertes Beispiel hilfreich, das das Problem demonstriert.

Hey, danke, dass du dich bei mir gemeldet hast! Gib mir etwas mehr Zeit, um herauszufinden, was ich falsch gemacht haben könnte, wäre peinlich, wenn es ein Anfängerfehler wäre ;)

Hallo @msbt - hast du jemals herausgefunden, was los war, oder kann das hier geschlossen werden?

Ich habe gerade keine Zeit, also lass es uns schließen und es noch einmal besuchen, wenn ich es noch einmal versuche und nicht weiterkomme;)

@msbt Irgendeine Idee zu diesem Problem? Ich habe das gleiche

@georgezouq leider nicht, gab das Projekt aus verschiedenen Gründen auf und fand nie eine Lösung

Rückverfolgung bitte. 😀

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 kannst du mal schauen

Es ignorierte meine Überschreibungen, da ich eine generische Ansicht verwendete. Dies hat mein Problem vorübergehend gelöst, aber mein Kunde stört mich in der Besonderheit seiner Filter lol. Könnten Sie sich das ansehen

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

Felder, Ausschluss, filter_overrides in Meta lösen diesen AssertionError Fehler nicht, wenn ich FilterView + filter_class = MyFilterSet verwende, muss ich filter_fields unter Ansicht setzen, um Felder auszuschließen,
andernfalls läuft def filter_for_field(cls, f, name, lookup_expr='exact') durch alle Felder

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen