Django为没有类/模型的视图添加下拉过滤器

Posted

技术标签:

【中文标题】Django为没有类/模型的视图添加下拉过滤器【英文标题】:Django add dropdown filter for a view with no class / model 【发布时间】:2018-09-04 08:32:21 【问题描述】:

我有一个方法映射到urls.py 中的url:

urlpatterns = [
    url(r'^mydir/statistics', statistics_view, name="Statistics")
]

然后在mydir/statistics/views.py我有方法:

def statistics_view(request):
    list_mystuff = Mytable.objects.all() #Mytable is defined in models
    ....
    #lots of code here to assign "enriched_models" data structure
    enriched_models = bunch of stuff
    ......
    return render(request, 'statistics.html', "statistics_enriched_models": enriched_models)

一切正常,一切都使用statistics.html 模板呈现。

现在我需要通过 Mytable 的一个字段来实现一个下拉过滤器。 对于类,我必须在 models.py 中为 Statistics 创建类,StatisticsAdmin 作为 admin.py 中的代理模型,注册它们,并拥有 list_filter=["myfield",] 在 StatisticsAdmin 中设置

有没有办法设置下拉过滤器(使用 list_filters 或其他)并直接呈现下拉列表而不创建类,只需使用我已有的(填充模板的方法)?

【问题讨论】:

我不明白你在这里问什么。你确实有一个模型类:Mytable。但是如果你想要一个下拉菜单,为什么不创建一个表单呢? @Daniel Roseman 也许我应该这样做,但是这个应用程序中的所有内容都是通过 url->method->template 方式完成的,或者只是一个直接一对一地表示表格的类。没有表格。我的视图表中的所有字段(我在屏幕上显示的)都不存在于数据库中,它们都是在 statistics_view 方法中计算和分配的。 “Mytable”数据用于这些计算但不显示。 “形式”方法是否适用? 【参考方案1】:

更新

最后我使用了 django-filter 工具:https://django-filter.readthedocs.io/en/master/index.html

用于下拉控件的过滤器是 django_filters.ChoiceFilter 。 工作得很好。

【讨论】:

以上是关于Django为没有类/模型的视图添加下拉过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Django 管理员:我可以为模型方法添加过滤器吗?

sharepoint 2013列表视图Webpart过滤器下拉列表

当用户更改下拉过滤器中的值时,Django过滤更新查询

django-filter使用分页

如何在 django 中进行复杂的搜索?使用视图还是模型?

cakephp:从下拉列表中为报告添加过滤器