我目前正在开发一个使用自定义注释查询集的应用。目前我有2个网址设置,但我需要一个用户希望汇总数据的每个字段。这可以手动配置,但它会违反DRY!我基本上会有+ -8网址基本上做同样的事情。
所以这就是我所做的,
以上所有作品。
因此,基本上URL配置将要注释的字段的名称传递给视图(对于SQL人员分组),视图会执行一些额外的处理,并根据传递给它的字段运行自定义模型管理器。
网址如下所示:
url('^(?P<field>[\w-]+)/(?P<year>\d{4})/(?P<month>\d+)/(?P<day>\d+)/$','by_subtype', name='chart_link'),
字段是db中实际运行查询集时使用的列。它从视图传递到我的自定义管理器。以下是经理代码的示例:
return self.filter(start_date_time__year=year).filter(start_date_time__month=month).filter(start_date_time__day=day).values(field).annotate(Count(field))
此外,我将 field 的值作为上下文变量传递。这用于动态构建链接。但问题实际上是遍历查询集并显示数据。
因此,典型的模板代码如下所示:
{% for object in object_list %}
{{ object.sub_type }} : {{ object.sub_type__count|intcomma }}
{% endfor %}
基本上你必须将字段硬编码为diplay(即object.x),无论如何都要动态分配这个吗?即 如果field = business 然后在模板中它应该自动处理:
{{ object.business }}
可以这样做吗?或者我需要创建几个URL?或者是否有更好的方法来实现相同的结果,单个视图和url动态处理查询。
您可以在github上找到代码,模板部分现在正在使用此代码段:http://www.djangosnippets.org/snippets/1412/因此,如果您稍后遇到此问题并希望执行类似操作,请查看github上的代码段。 :http://gist.github.com/233262
答案 0 :(得分:1)
听起来你想要按照以下方式做点什么:
# in the views.py:
field = 'business'
{# in the template: #}
{{ object.field }}
并在输出中显示object.business
的值。使用开箱即用的Django模板语言是不可能的。
有些片段定义了您可以用来实现此目的的模板过滤器:http://www.djangosnippets.org/snippets/1412/