Zoeken…


Gebruik een django-filter met CBV

django-filter is een generiek systeem voor het filteren van Django QuerySets op basis van gebruikersselecties. De documentatie gebruikt het in een functie-gebaseerde weergave als een productmodel:

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)

Het filter is als volgt:

import django_filters

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

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

Om dit in een CBV te gebruiken, overschrijft u get_queryset() van de ListView en retourneert u de gefilterde querset :

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

Het is mogelijk om toegang te krijgen tot de gefilterde objecten in uw weergaven, zoals met paginering, in f.qs Dit zal de lijst met gefilterde objecten pagineren.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow