Django:向基于(基于)类的ListView添加过滤(和排序)的最佳方法?

Pau*_*ans 6 sorting django filter django-generic-views

假设我有一个这样的模型:

class Car(models.Model):
    BRANDS = (
        ('FRD', 'Ford'),
        ('MCD', 'Mercedes'),
        ...
    )
    brand = models.CharField(max_length=3, choices=BRANDS)
    color = models.CharField(max_length=24)
    url = models.URLField()
    new = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

并希望使用基于类的通用视图生成列表视图:

在urls.py中

url(r'^car/list/$', CarList.as_view(), name='car_list'),
Run Code Online (Sandbox Code Playgroud)

在views.py中

class CarList(ListView):
    model = Car
    template_name = "list.html"
    def get_queryset(self):
        return Car.objects.all()
Run Code Online (Sandbox Code Playgroud)

在list.html中

{% for car in cars %}
    <tr>
        <td>{{ car.brand }}</td>
        <td>{{ car.color }}</td>
        <td>{{ car.url }}</td>
        <td>{{ car.new }}</td>
    </tr>
Run Code Online (Sandbox Code Playgroud)

现在我想提供一些选项来在查询集上添加过滤器(以及每列的排序选项).例如,在任何列上执行%LIKE%的常规搜索框,或从品牌选择中选择的选项或每列的简单asc/desc.

我知道过滤器和排序最终应该在queryset(get_queryset)中,但这需要在模板和视图代码中进行大量的特定工作,而我觉得应该有一些软件包可以帮助解决这个问题?

有人有我的指示吗?

Gho*_*r21 0

您猜对了, Django Packages是一个寻找 Django 包的好地方:-)。我以前没有使用过它,但是快速浏览一下您可能会发现django-tables2很有帮助。我想还有其他值得考虑的。