使用帶有 CBV 的 django-filter
django-filter
是基於使用者選擇過濾 Django QuerySets 的通用系統。文件在基於函式的檢視中將其用作產品模型:
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)
過濾器如下:
import django_filters
class ProductFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='iexact')
class Meta:
model = Product
fields = ['price', 'release_date']
要在 CBV 中使用它,請覆蓋 ListView 的 get_queryset()
,然後返回已過濾的 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
可以在 f.qs
中訪問檢視中的過濾物件,例如分頁。這將對過濾的物件列表進行分頁。