Я довольно новичок как в Python, так и в Django и хотел бы по возможности следовать рекомендациям. Я хотел бы привести в порядок следующий код, чтобы было легче работать с ним.
Я пытаюсь настроить представление, к которому можно получить доступ через несколько 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, вместо того, чтобы выписывать все это несколько раз?
Любой совет будет принят с благодарностью.
Спасибо.