我有一个 Django 通用 ListView ,我想根据输入到 URL 中的值对其进行过滤。 例如,当有人输入 mysite.com/defaults/41 时,我希望 View 过滤所有匹配 41 的值。 我遇到过一些使用基于函数的 View 来执行此操作的方法,但不是基于类的 Django View 。
我试过:
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'),
请您参考如下方法:
你很接近,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<b>_id</b>=self.kwargs[<b>'device'</b>]
)
最好使用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)<b>.get_queryset()</b>.filter(
device_id=self.kwargs['device']
)
