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