Recherche…


Utilisez django-filter avec CBV

django-filter est un système générique de filtrage de QuangoSets basé sur les sélections des utilisateurs. La documentation l' utilise dans une vue basée sur les fonctions en tant que modèle de produit:

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)

Le filtre sera comme suit:

import django_filters

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

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

Pour utiliser cela dans une CBV, remplacez get_queryset() du ListView, puis retournez le querset filtré:

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

Il est possible d'accéder aux objets filtrés dans vos vues, par exemple avec la pagination, dans f.qs Cela va paginer la liste des objets filtrés.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow