Buscar..


Utilice django-filter con CBV

django-filter es un sistema genérico para filtrar Django QuerySets según las selecciones de los usuarios. La documentación lo utiliza en una vista basada en funciones como modelo de producto:

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField()
    description = models.TextField()
    release_date = models.DateField()
    manufacturer = models.ForeignKey(Manufacturer)

El filtro será el siguiente:

import django_filters

class ProductFilter(django_filters.FilterSet):
    name = django_filters.CharFilter(lookup_expr='iexact')

    class Meta:
        model = Product
        fields = ['price', 'release_date']

Para usar esto en un CBV, anule get_queryset() de ListView, luego devuelva el conjunto de querset filtrado:

from django.views.generic import ListView
from .filters import ProductFilter

class ArticleListView(ListView):
    model = Product

    def get_queryset(self):
        qs = self.model.objects.all()
        product_filtered_list = ProductFilter(self.request.GET, queryset=qs)
        return product_filtered_list.qs

Es posible acceder a los objetos filtrados en sus vistas, como con la paginación, en f.qs Esto paginará la lista de objetos filtrados.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow