Mat*_*ttG 3 python django django-views
我有一个 Django 通用列表视图,我想根据输入到 URL 中的值对其进行过滤。例如,当有人输入 mysite.com/defaults/41 时,我希望视图过滤所有与 41 匹配的值。我遇到了几种使用基于函数的视图执行此操作的方法,但不是基于类的 Django 视图。
我试过了:
视图.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])
Run Code Online (Sandbox Code Playgroud)
网址.py
path('<int:device>', DefaultsListView.as_view(), name='Default_Listview'),
Run Code Online (Sandbox Code Playgroud)
你很接近,这self.kwargs是一个将字符串映射到从 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']
)Run Code Online (Sandbox Code Playgroud)
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']
)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2649 次 |
| 最近记录: |