Django:如何在覆盖 get_queryset() 时注入数据?
Django: how to inject data when overriding get_queryset()?
非常熟悉基于 Django class 的视图。
我有一个运行良好但显示所有对象的 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() 方法。
谢谢。
您需要在 URL 中提供它。例如:
url(r'folder/(?P<id>\d+)/media', FolderMediaListView.as_view, name='folder_media_list')
Django URL 调度程序传递给视图的关键字参数 (kwargs
) 来自以下内容:
- 在URL表达式中捕获的参数
- URL 定义中指定的其他参数
全部在 urls.py.
因此,例如,为了从 URL 中获取 ID,格式如下:/folder/id/
:
url(r'folder/(?P<pk>\d+)/', FolderMediaListView.as_view)
或者如果 id 是常量(很少见),您可以将其作为附加参数传递:
url(r'folder/', FolderMediaListView.as_view, {'pk': 1})
有关该主题的更多信息,请参见 Django documentation。
非常熟悉基于 Django class 的视图。 我有一个运行良好但显示所有对象的 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() 方法。
谢谢。
您需要在 URL 中提供它。例如:
url(r'folder/(?P<id>\d+)/media', FolderMediaListView.as_view, name='folder_media_list')
Django URL 调度程序传递给视图的关键字参数 (kwargs
) 来自以下内容:
- 在URL表达式中捕获的参数
- URL 定义中指定的其他参数
全部在 urls.py.
因此,例如,为了从 URL 中获取 ID,格式如下:/folder/id/
:
url(r'folder/(?P<pk>\d+)/', FolderMediaListView.as_view)
或者如果 id 是常量(很少见),您可以将其作为附加参数传递:
url(r'folder/', FolderMediaListView.as_view, {'pk': 1})
有关该主题的更多信息,请参见 Django documentation。