Ricerca…


Usa il filtro Django con CBV

django-filter è un sistema generico per il filtraggio di Django QuerySet in base alle selezioni dell'utente. La documentazione lo utilizza in una vista basata sulle funzioni come modello di prodotto:

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)

Il filtro sarà il seguente:

import django_filters

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

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

Per utilizzare questo in un CBV, eseguire l'override di get_queryset() di ListView, quindi restituire il querset filtri filtrato:

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

È possibile accedere agli oggetti filtrati nelle viste, ad esempio con paginazione, in f.qs Questo impaginerà l'elenco degli oggetti filtrati.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow