Suche…


Verwenden Sie Django-Filter mit CBV

django-filter ist ein generisches System zum Filtern von Django-QuerySets nach Benutzerauswahl. Die Dokumentation verwendet es in einer funktionsbasierten Sicht als Produktmodell:

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)

Der Filter wird wie folgt sein:

import django_filters

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

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

Um dies in einer CBV zu verwenden, überschreiben Sie get_queryset() der ListView und geben Sie das gefilterte 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

Sie können in Ihren Ansichten auf die gefilterten Objekte zugreifen, z. B. mit f.qs , in f.qs Dadurch wird die Liste der gefilterten Objekte paginiert.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow