基于Django类的视图非常简单。 我有一个运行良好的ListView但显示了所有对象。我想过滤一下这个,在这里我做了什么,发现了一些例子:
models.py :
class FolderElement(TimeStampedModel):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
class FolderMedia(TimeStampedModel):
folder_element = models.ForeignKey(FolderElement)
file = models.FileField(upload_to=generate_filepath_folder)
slug = models.SlugField(max_length=50, blank=True)
views.py :
class FolderMediaListView(ListView):
model = FolderMedia
template_name = "book.html"
def get_queryset(self):
self.folder_element = get_object_or_404(FolderElement,
pk=self.kwargs['pk'])
return FolderMedia.filter(folder_element=self.folder_element)
def render_to_response(self, context, **response_kwargs):
files = [ serialize(p) for p in self.get_queryset() ]
data = {'files': files}
response = JSONResponse(data, mimetype=response_mimetype(self.request))
response['Content-Disposition'] = 'inline; filename=files.json'
return response
但是现在我已经覆盖了get_queryset()
方法,我不明白我应该如何将pk
参数注入到过滤器工作的视图中。目前,使用pdb,我可以看到self.kwargs
等于{}
到get_queryset()方法中。
感谢。
答案 0 :(得分:1)
您需要在网址中提供它。例如:
url(r'folder/(?P<id>\d+)/media', FolderMediaListView.as_view, name='folder_media_list')
答案 1 :(得分:1)
Django URL调度程序传递给视图的关键字参数(kwargs
)来自以下内容:
所有这些都在urls.py。
因此,举例来说,为了从表单中获取ID,请使用以下格式:/folder/id/
:
url(r'folder/(?P<pk>\d+)/', FolderMediaListView.as_view)
或者如果id是常量(更少),您可以将其作为附加参数传递:
url(r'folder/', FolderMediaListView.as_view, {'pk': 1})
Django documentation中有关此主题的更多信息。