Estoy usando la vista genérica basada en clases de Django 1.3 para mostrar una lista de imágenes, pero quiero agregar un filtro que permita al usuario restringir los resultados mostrados.¿Cómo crear un formulario de filtro para una lista de objetos genéricos (clase) en Django?
Mis actuales trabajos de aproximación, pero se siente muy hacker:
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
¿Hay mejores medios para añadir la costumbre de filtrar para una visión genérica?
acabo de encontrar la aplicación [django-filter] (https://github.com/alex/django-filter) y la combinó con su mixin. Creo que eso es lo suficientemente limpio para mí ;-) ¡Gracias! – cvk
También usé django-filter y en combinación con el método get_queryset() anterior y funciona muy bien. fyi, filter.qs es el atributo que devuelve el queryset filtrado de un objeto filterset (parte de la aplicación django-filter) – rsp
Para usar esta función para forms.DateField, ¿cómo puedo hacer? – Marcaum54