Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

210
Views
Django, Python: no se pueden filtrar productos con valores de paso verdaderos en la solicitud de obtención y ordenar los productos

Estoy tratando de filtrar algunos productos y ordenar los productos filtrados por precio ascendente y descendente.

Este es mi código en la vista:

 def is_valid_queryparam(param): return param != '' and param is not None def filter(request): if request.GET: price_min = request.GET.get('priceMin') price_max = request.GET.get('priceMax') sort_by = request.GET.get("sort", "l2h") if is_valid_queryparam(price_min): if sort_by == "l2h": products = Product.objects.filter(price__gte=price_min).order_by('price') elif sort_by == "h2l": products = Product.objects.filter(price__gte=price_min).order_by('-price') paginator = Paginator(products, 9) page = request.GET.get('page') paged_products = paginator.get_page(page) product_count = products.count() if is_valid_queryparam(price_max): if sort_by == "l2h": products = Product.objects.filter(price__lte=price_max).order_by('price') elif sort_by == "h2l": products = Product.objects.filter(price__lte=price_max).order_by('-price') paginator = Paginator(products, 9) page = request.GET.get('page') paged_products = paginator.get_page(page) product_count = products.count() else: products = Product.objects.all().order_by('price') paginator = Paginator(products, 9) page = request.GET.get('page') paged_products = paginator.get_page(page) product_count = products.count() context={ 'products': paged_products, 'product_count': product_count, } return render(request, 'store.html', context)

Si trato de filtrar según el precio mínimo y máximo, funciona, pero cuando trato de ordenar o si no se aplica ningún filtro, aparece este UnboundLocalError:

 UnboundLocalError at /store/ local variable 'paged_products' referenced before assignment Request Method: GET Request URL: http://127.0.0.1:8000/store/?sort=h2l Django Version: 3.1 Exception Type: UnboundLocalError Exception Value: local variable 'paged_products' referenced before assignment Exception Location: C:\Users\store\views.py, line 299, in filter

Investigué la documentación de Django, Google y SO, pero no encontré una solución. Intenté reorganizar el código, declarar las variables como globales, excluir 'ordenar' de los parámetros request.GET y no tuve éxito.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Está recibiendo el error UnboundLocalError porque no ha definido un bloque else para if is_valid_queryparam(price_min): y if is_valid_queryparam(price_max): así como para ordenar por. Como resultado, cuando no aplica un filtro paged_products y product_count nunca se define y UnboundLocalError at /store/ local variable 'paged_products' referenced before assignment .

Pruebe el siguiente código a continuación que eliminará el problema y optimizará el código.

 def is_valid_queryparam(param): return param != '' and param is not None def filter(request): if request.GET: price_min = request.GET.get('priceMin') price_max = request.GET.get('priceMax') sort_by = request.GET.get("sort", "l2h") if is_valid_queryparam(price_min): if sort_by == "l2h": products = Product.objects.filter(price__gte=price_min).order_by('price') elif sort_by == "h2l": products = Product.objects.filter(price__gte=price_min).order_by('-price') else: products = Product.objects.filter(price__gte=price_min) else: products = Product.objects.all().order_by('price') if is_valid_queryparam(price_max): if sort_by == "l2h": products = Product.objects.filter(price__lte=price_max).order_by('price') elif sort_by == "h2l": products = Product.objects.filter(price__lte=price_max).order_by('-price') else: products = Product.objects.filter(price__lte=price_max) else: products = Product.objects.all().order_by('price') else: products = Product.objects.all().order_by('price') paginator = Paginator(products, 9) page = request.GET.get('page') paged_products = paginator.get_page(page) product_count = products.count() context = { 'products': paged_products, 'product_count': product_count, } return render(request, 'store.html', context)
about 4 years ago · Juan Pablo Isaza Report

0

Cambié ligeramente el código de Nahidur Rahman para que funcione el filtro de precio mínimo, es necesario tomar la consulta del precio mínimo y aplicar el filtro del precio máximo.

 def is_valid_queryparam(param): return param != '' and param is not None def filter(request): if request.GET: price_min = request.GET.get('priceMin') price_max = request.GET.get('priceMax') sort_by = request.GET.get("sort", "l2h") if is_valid_queryparam(price_min): if sort_by == "l2h": products = Product.objects.filter(price__gte=price_min).order_by('price') elif sort_by == "h2l": products = Product.objects.filter(price__gte=price_min).order_by('-price') else: products = Product.objects.filter(price__gte=price_min) else: products = Product.objects.all().order_by('price') if is_valid_queryparam(price_max): if sort_by == "l2h": products = products.filter(price__lte=price_max).order_by('price') elif sort_by == "h2l": products = products.filter(price__lte=price_max).order_by('-price') else: products = products.filter(price__lte=price_max) else: products = products else: products = Product.objects.all().order_by('price') paginator = Paginator(products, 9) page = request.GET.get('page') paged_products = paginator.get_page(page) product_count = products.count() context = { 'products': paged_products, 'product_count': product_count, } return render(request, 'store.html', context)
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!