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

Posted

技术标签:

【中文标题】Django:将过滤(和排序)添加到基于(通用)类的ListView的最佳方法?【英文标题】:Django: best way to add filtering (and sorting) to (generic) class based ListView? 【发布时间】:2012-08-02 22:03:30 【问题描述】:

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

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)

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

在 urls.py 中

url(r'^car/list/$', CarList.as_view(), name='car_list'),

在views.py中

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

在list.html中

% for car in cars %
    <tr>
        <td> car.brand </td>
        <td> car.color </td>
        <td> car.url </td>
        <td> car.new </td>
    </tr>

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

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

有人给我指路吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的链接!我正在阅读有关 django-filter(-actually-maintained) 的信息,但缺少诸如排序之类的功能,是的,确实还有原始 html 构建。 django-tables2 看起来很有希望,我看到了很多好东西,通用视图、排序、标题、模板等......

以上是关于Django:将过滤(和排序)添加到基于(通用)类的ListView的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用基于类的通用 ListView 在单个模板中同时过滤和排序?如果是,如何?

如何根据 Django 中当前基于类的通用视图模型向模板加载器添加路径

Django 通用视图:何时使用 ListView 与 DetailView

Django 基于类的通用视图和身份验证

从Django中基于类的通用视图向ModelForm发送request.user对象

基于 Django 类的通用视图和 ModelForms