Передача аргумента url в список запросов ListView
models.py
class Lab(Model):
acronym = CharField(max_length=10)
class Message(Model):
lab = ForeignKey(Lab)
urls.py
urlpatterns = patterns('',
url(r'^(?P<lab>\w+)/$', ListView.as_view(
queryset=Message.objects.filter(lab__acronym='')
)),
)
Я хочу передать аргумент ключевого слова lab
в список запросов ListView. Это означает, что если lab
равна TEST
, результатом будет Message.objects.filter(lab__acronym='TEST')
.
Как я могу это сделать?
Ответы
Ответ 1
Для этого вам нужно написать свой собственный взгляд, а затем просто переопределить метод get_queryset
:
class CustomListView(ListView):
def get_queryset(self):
return Message.objects.filter(lab__acronym=self.kwargs['lab'])
и также используйте CustomListView
в URL-адресах.
Ответ 2
class CustomListView(ListView):
model = Message
def get(self, request, *args, **kwagrs):
# either
self.object_list = self.get_queryset()
self.object_list = self.object_list.filter(lab__acronym=kwargs['lab'])
# or
queryset = Lab.objects.filter(acronym=kwargs['lab'])
if queryset.exists():
self.object_list = self.object_list.filter(lab__acronym=kwargs['lab'])
else:
raise Http404("No lab found for this acronym")
# in both cases
context = self.get_context_data()
return self.render_to_response(context)