【问题标题】:python Query parameters for receiving postpython查询接收post的参数
【发布时间】:2013-10-08 16:03:04
【问题描述】:

这里我遇到了如下问题: 我通过 post 获取参数以根据我传递的参数进行查询……执行性别过滤器。 所以我做得很好

def filter(request):
    if request.method == 'POST':
        namepost = request.POST.get('name')
        surnamepost = request.POST.get('surname')

        if namepost != None and surnamepost != None:
            result = [a.get_json() for a in Player.objects.filter((Q(name=namepost) & Q(surname=surnamepost)))]
       elif namepost != None and surnamepost == None:
            result = [a.get_json() for a in Player.objects.filter(name=namepost)]

        data = {"meta": {"total_count":len(result)}, "objects": result}
        aa = json.dumps(data)
        return HttpResponse(aa, content_type='application/json')

工作正常,问题是: 如果只有这两个参数,没有问题,就是完成剩下的假设...问题是我最多可以有 10 个参数通过邮寄方式传递给过滤器,而我永远不知道传递了哪些参数,可以是 1 , 2, 4, ... 当用户制作过滤器时

但是这样做需要很多 ifs ,它会有很多机会...... 有什么办法我可以用另一种方式做到这一点?

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    未经测试,假设我正确理解了您的问题,您可以这样做,

    def filter(request):
        if request.method == 'POST':
            filter_objects = [
                Q(**{key: value}) for key, value in request.POST.iteritems() if value
            ]
    
            result = [a.get_json() for a in Player.objects.filter(*filter_objects)]
    
            data = {"meta": {"total_count":len(result)}, "objects": result}
            aa = json.dumps(data)
            return HttpResponse(aa, content_type='application/json')
    

    【讨论】:

    • 我设法做到了......所以我做到了:plnkr.co/edit/L1ByIyFyaEdgwrfVU7Jr?p=info 但我有一个问题,但这适用于姓名和姓氏等直接过滤字段,但不适用于该职位,因为要做对于该位置必须执行以下操作:Player.objects.filter(position__in=Position.objects.filter(name=positionpost)) 我如何在代码中执行此操作?有人可以帮助我吗?
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    相关资源
    最近更新 更多