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
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
von django.db importiere Modelle
Klasse Store(models.Model):
Name = Modelle.CharField(max_length=80)
erstellt = Modelle.DateField()
Bild = Modelle.ImageField()
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'],
}
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
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.