2013-10-08 3 views
0

У меня возникла проблема, которая заключается в следующем: Я получаю параметры через сообщение, чтобы делать запросы в зависимости от paramtros, которые я передал ... делая гендерные фильтры. Так что я делаю хорошоpython Параметры запроса для получения сообщения

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, у него было бы много шансов ... есть ли способ, которым я могу сделать это по-другому?

ответ

0

непроверенная, и предполагая, что я правильно понял ваш вопрос, вы могли бы сделать что-то вроде этого,

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') 
+0

мне удалось сделать ... так что я сделал: http://plnkr.co/edit/ L1ByIyFyaEdgwrfVU7Jr? P = info Но у меня есть проблема, но это работает для полей прямого фильтра как имя и фамилия, но не для позиции, потому что для этой позиции нужно было сделать что-то вроде этого: Player.objects.filter (position__in = Position.objects.filter (name = positionpost)) Как это сделать в коде? Кто-то может мне помочь? – Helio

Смежные вопросы