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