python - Django - 一个 View ,多个 URL?

标签 python django views models

我对 Python 和 Django 都很陌生,希望尽可能遵循最佳实践。我想整理以下代码以使其更易于使用。

我正在尝试设置一个可以通过多个 URL 访问的 View ,这些 URL 提供不同的参数,将为其返回和显示查询集。

我已经设置了以下 URL:

    url(r'^myrecords/$', login_required(RecordListView.as_view()), {'filter': 'all'}, name='myrecords'),
    url(r'^myrecords/page(?P<page>[0-9]+)/$', login_required(RecordListView.as_view()), {'filter': 'all'}, name='myrecords'),
    url(r'^myrecords/(?P<year>\d{4})/$', login_required(RecordListView.as_view()), {'filter': 'year'}, name='myrecords'),
    url(r'^myrecords/last(?P<months>[0-9]{1,2})months/$', login_required(RecordListView.as_view()), {'filter': 'month'}, name='myrecords'),

然后在我看来我有这样的东西(实际上还有其他几个参数,但无论输入的 URL 是什么,这些参数都应该保持不变。):

def get_queryset(self): 
    if (self.kwargs['filter'] == 'month'):
        x_months_ago = (datetime.date.today() - 
        datetime.timedelta(int(self.kwargs['months']) * 365 / 12))
        queryset = Record.objects.filter(user=self.request.user, 
        date__gte = x_months_ago.isoformat())
    elif (self.kwargs['filter'] == 'year'):
        queryset = Record.objects.filter(user=self.request.user, date__year=self.kwargs['year'])
    else
        queryset = Record.objects.filter(user=self.request.user)

这对我来说似乎很困惑。无论如何我可以让它更干净吗?是否可以将过滤器参数放在某种数据结构中,然后将它们传递给 Record.objects.filter 行,而不是多次写出整个内容?

如有任何建议,我们将不胜感激。

谢谢。

最佳答案

当然。您可以使用字典:

my_queryset_filters = {
    'user': self.request.user,
    'date__year': self.kwargs['year'],
}

Record.objects.filter(**my_queryset_filters)

** 将字典扩展为关键字参数。 (还有 * 将列表扩展为位置参数。)

关于python - Django - 一个 View ,多个 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7420430/

相关文章:

python - 运行 manage.py 测试时 django.contrib.messages.tests 中的虚假故障

python - Django Rest Framework 获取一个查找字段作为超链接列表

Django - 用户 session 显示用户数据

python - 使用 Pandas 在数据透视表上运行 groupby

python - 从 TAI 修改儒略日转换为日期时间

javascript - 如何将 JavaScript 添加到 ASP.NET MVC View ?

sql - 在 self 加入问题上需要一些认真的帮助

sql - 在 SQL 中使用 View

python - 如何将值从一个对话框传递到另一个对话框

python - 如何在 Qt 环境中嵌入的 matplotlib 中更快地绘制大量信号?