Soy bastante nuevo en Python y Django y me gustaría seguir las mejores prácticas siempre que sea posible. Me gustaría ordenar el siguiente código para que sea más fácil trabajar con él.Django: una vista, varias URL?
Estoy tratando de configurar una vista a la que se puede acceder a través de varias URL que proporcionan diferentes parámetros para los cuales se devolverá y se mostrará un conjunto de consulta.
haber puesto por las siguientes 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'),
A continuación, en mi opinión, tengo algo como esto (En realidad, hay varios otros parámetros, pero estos deben seguir siendo el mismo, independientemente de la dirección URL especificada.):
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)
Esto me parece muy complicado. ¿Hay alguna forma de que pueda hacerlo más limpio? ¿Es posible poner los parámetros de filtro en algún tipo de estructura de datos y luego pasarlos a la línea Record.objects.filter, en lugar de escribir todo el conjunto varias veces?
Cualquier consejo sería muy apreciado.
Gracias.