Django如何改进query_params过滤器

时间:2018-03-16 19:37:49

标签: django python-3.x

我根据请求query_params过滤了我的视图查询集,但我不喜欢我是怎么做的,有什么方法可以做到这个最pythonic吗?

def get_queryset(self):
    qs = Publication.objects

    if self.request.query_params.get('user'):
        user = self.request.query_params.get('user')
        if user.isdigit():
            qs = qs.filter(owner__pk=user)

    limit = self.request.query_params.get('limit')
    if limit and limit.isdigit():
        return qs.all()[:int(limit)]
    return qs.all()

2 个答案:

答案 0 :(得分:1)

.get需要第二个default参数,因此您无需检查参数是否存在。如果请求数据不包含user,则它将为''。所以,这可能会更好:

def get_queryset(self):
    qs = Publication.objects

    user = self.request.query_params.get('user', '')
    limit = self.request.query_params.get('limit', '')

    if user.isdigit():
        qs = qs.filter(owner__pk=user)

    if limit.isdigit():
        return qs.all()[:int(limit)]

    return qs.all()

答案 1 :(得分:0)

def get_queryset(self):
    qs = Publication.objects.all()

    user = self.request.query_params.get('user', None)
    limit = self.request.query_params.get('limit', None)

    if user:
       qs = qs.filter(owner__pk=user)

    if limit:
       return qs[:int(limit)]

    return qs