2016-06-05 1 views
1

Я только начал практический на Python-ДжангоPython - Джанго: Чтение нескольких Params запросов для создания запросов

Я пытаюсь объекты фильтра из БД с помощью запросов в целях Джанго. Три параметра передаются из URL-адреса, и я хочу выполнить условие «или» для параметров. Несколько параметров могут быть нулевыми.

if 'custName' in request.GET : 
     custName = request.GET['custName'] 
     if custName is not None and custName != '': 
      files_name=LopFtsMLoanFilesMaster.objects.filter(customer_name__contains=custName) 

if 'custId' in request.GET and request.GET['custId']: 
      custId = request.GET['custId'] 
      if custId is not None and custId != '': 
       files_id=LopFtsMLoanFilesMaster.objects.filter(customer_id__containis=custId) 

if 'address' in request.GET and request.GET['address']: 
      address= request.GET['address'] 
      if address is not None and address != '': 
       files_address =LopFtsMLoanFilesMaster.objects.filter(original_address1__contains=address) 

files = files_name | files_id | files_address 

return render(request, 'file_enquiry.html', 
        {'results': files}) 

Но я принимаю local variable 'files_id' referenced before assignment Ошибка.

ответ

0

Если 'custId' in request.GET and request.GET['custId'] является ложным, то files_id никогда не определяется, но вы хотите безоговорочно ссылаться на него. Поэтому перед условием вы должны определить значение по умолчанию (например, set()), чтобы гарантировать, что оно всегда определено.

Ваш код может быть очень упрощено, хотя:

def filtered(request_param, model_field): 
    param_val = request.GET.get(request_param) # returns None if request_param is not in request.GET 
    if not param_val: # if param_val in (None, '') 
     return set() 
    return LopFtsMLoanFilesMaster.objects.filter(**{model_field + '__contains': param_val}) 

files = (filtered('custName', 'customer_name') | 
     filtered('custId', 'customer_id') | 
     filtered('address', 'original_address')) 
+0

спасибо Алекс Холл. Я попробовал ваше предложение, но все же, если cust_id пуст, я получаю объект «set», у которого нет ошибки «запроса». Пожалуйста, порекомендуйте. –

+0

Хорошо, я попытался вернуть пустой запрос, как показано ниже, и это сработало. Благодарим за упрощенное решение. return LopFtsMLoanFilesMaster.objects.none() –

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

  • Нет связанных вопросов^_^