Używam ogólnego widoku opartego na klasie Django 1.3, aby wyświetlić listę obrazów, ale chcę dodać filtr, który umożliwia użytkownikowi zawężenie wyświetlanych wyników.Jak utworzyć formularz filtrujący dla ogólnej listy obiektów w klasie w Django?
Moje obecne prace podejście, ale czuje się dość hackish:
class ImageFilterForm(ModelForm):
class Meta:
model = Image
class ImageListView(ListView):
model = Image
def get_queryset(self):
qs = Image.objects.select_related()
for item in self.request.GET:
key, value = item, self.request.GET.getlist(item)
# ... Filtering here ...
return qs
def get_context_data(self, **kwargs):
context = super(ImageListView, self).get_context_data(**kwargs)
context['filter_form'] = ImageFilterForm(self.request.GET)
return context
Czy istnieją lepsze sposoby, aby dodać niestandardowe filtrowanie do ogólnego widoku?
Właśnie okazało się, że Aplikacja [django-filter] (https://github.com/alex/django-filter) i połączyła ją z Twoim mixinem. Myślę, że to dla mnie wystarczająco czyste ;-) Dzięki! – cvk
Użyłem również django-filter i w połączeniu z metą get_queryset() powyżej i to działa ładnie. fyi, filter.qs to atrybut, który zwraca przefiltrowany zestaw zapytań z obiektu zestawu filtrującego (część aplikacji filtrującej django). – rsp
Aby użyć tej funkcji w formularzach .DateField, jak mogę to zrobić? – Marcaum54