7
私はPythonとDjangoの両方にかなり新しいので、可能な限りベストプラクティスに従いたいと考えています。私は以下のコードを整理して作業しやすくしたいと思います。Django - 1つのビュー、複数のURL?
私は、クエリーセットが返されて表示されるさまざまなパラメータを提供する複数の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行に渡すことは可能ですか?
アドバイスをいただければ幸いです。
ありがとうございました。