Django Slice Queryset 通过 GET-Attribute 安全地进行
Django Slice Queryset safely via GET-Attribute
我有一个这样的列表视图:
from django.views.generic import ListView
class SomeListView(ListView):
def get_queryset(self):
qs = super(SomeListView, self).get_queryset()
limit = self.request.GET.get('limit', None)
if limit:
return qs[:limit]
return qs
到目前为止,这并不是处理切片功能的理想解决方案
- 对类型错误开放(可以修复,但需要再试一次)
- 不太优雅
是否有更好的方法通过 GET 对 QuerySet 进行切片?
您可以使用表单来处理所有验证内容和设置默认值以限制字段。我会做一个表格
class SliceForm(forms.Form):
limit = forms.IntegerField(min_value=1)
然后像这样在您的视图中使用它
def get_queryset(self):
qs = super(...).get_queryset()
form = SliceForm(self.request.GET)
if form.is_valid():
return qs[:form.cleaned_data['limit']]
else:
return qs
我有一个这样的列表视图:
from django.views.generic import ListView
class SomeListView(ListView):
def get_queryset(self):
qs = super(SomeListView, self).get_queryset()
limit = self.request.GET.get('limit', None)
if limit:
return qs[:limit]
return qs
到目前为止,这并不是处理切片功能的理想解决方案
- 对类型错误开放(可以修复,但需要再试一次)
- 不太优雅
是否有更好的方法通过 GET 对 QuerySet 进行切片?
您可以使用表单来处理所有验证内容和设置默认值以限制字段。我会做一个表格
class SliceForm(forms.Form):
limit = forms.IntegerField(min_value=1)
然后像这样在您的视图中使用它
def get_queryset(self):
qs = super(...).get_queryset()
form = SliceForm(self.request.GET)
if form.is_valid():
return qs[:form.cleaned_data['limit']]
else:
return qs