我有一个Django通用列表视图,我想根据输入到URL中的值进行过滤。 例如,当有人输入mysite.com/defaults/41时,我希望视图过滤所有匹配41的值。 我通过基于功能的视图实现了几种方法,但是没有基于类的Django视图。
我尝试过:
views.py
class DefaultsListView(LoginRequiredMixin,ListView):
model = models.DefaultDMLSProcessParams
template_name = 'defaults_list.html'
login_url = 'login'
def get_queryset(self):
return models.DefaultDMLSProcessParams.objects.filter(device=self.kwargs[device])
urls.py
path('<int:device>', DefaultsListView.as_view(), name='Default_Listview'),
答案 0 :(得分:2)
您接近了,self.kwargs
是一个字典,将 strings 映射到从URL提取的相应值,因此您需要在此处使用包含'device'
的字符串:
class DefaultsListView(LoginRequiredMixin,ListView):
model = models.DefaultDMLSProcessParams
template_name = 'defaults_list.html'
login_url = 'login'
def get_queryset(self):
return models.DefaultDMLSProcessParams.objects.filter(
device_id=self.kwargs['device']
)
在这里使用devide_id
可能更好,因为在语法上我们很清楚地将标识符与标识符进行比较。
进行super()
调用也可能更“惯用”,这样,如果您以后添加mixins,它们可以“预处理” get_queryset
调用:
class DefaultsListView(LoginRequiredMixin,ListView):
model = models.DefaultDMLSProcessParams
template_name = 'defaults_list.html'
login_url = 'login'
def get_queryset(self):
return super(DefaultsListView, self).get_queryset().filter(
device_id=self.kwargs['device']
)