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