我正在使用Django的通用视图,并试图找到一种使用D.R.Y过滤文章列表的方法。
我当前的urls.py
文件(仅限相关部分):
all_articles = {
'queryset' : Article.objects.all(),
'template_name' : 'article/admin.html'
}
url(r'^admin/$', object_list, all_articles, 'admin_article_home'),
我想做类似以下的事情,但没有看似多余的代码:
filter_status_draft = {
'queryset' : Article.objects.filter(status = 'Draft'),
'template_name' : 'article/admin.html'
}
filter_status_scheduled = {
'queryset' : Article.objects.filter(status = 'Scheduled'),
'template_name' : 'article/admin.html'
}
url(r'^admin/filter/status/draft/$', object_list, filter_status_draft, 'admin_article_status_filter_draft'),
url(r'^admin/filter/status/scheduled/$', object_list, filter_status_scheduled, 'admin_article_status_filter_scheduled'),
似乎必须有一种更有效的方法来实现这一目标。
我已经查看了this answer,但似乎创建一个视图会破坏通用网址的大部分用途。
有没有办法做这么简单的事情?
答案 0 :(得分:1)
如果您不想编写自己的视图,另一种方法是编写自定义模型管理器。所以你写urls.py
就好了:
filter_status_draft = {
'queryset' : Article.objects.drafted(),
'template_name' : 'article/admin.html'
}
filter_status_scheduled = {
'queryset' : Article.objects.scheduled(),
'template_name' : 'article/admin.html'
}
查看documentation on writing custom model managers了解详情。
但是,编写视图,特别是现在视图是基于类的视图,从长远来看,它是一种更加灵活和干燥的方法。