通过GET-Attribute安全地进行Django Slice Queryset

时间:2015-10-14 14:19:52

标签: python django django-queryset

我有一个这样的列表视图:

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

现在这是处理切片功能的理想解决方案,因为

  • 对TypeErrors开放(可以修复,但需要另一个尝试exept)
  • 不是很优雅

有没有更好的方法通过GET对QuerySets进行切片?

1 个答案:

答案 0 :(得分:2)

您可以使用表单处理所有验证内容并设置默认值以限制字段。我做了一个表格

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