es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

django – filtrado de objetos q – obtener lista

Quiero hacer una intersección al llevar inteligencia, fuerza y encanto desde la variable stat a la función getlist, pero solo aparece como una combinación. ¿Cuál podría ser la razón? Estoy esperando tu ayuda.

class ProductListView(View):
    def get(self,request):
        category     = request.GET.get('category', None)
        sub_category = request.GET.get('sub_category', None)
        stat         = request.GET.getlist('stat', None)

        q=Q()

        if category:
            q &= Q(sub_category__category__name=category)

        if sub_category:
            q &= Q(sub_category__name=sub_category)

        if stat:
            q &= Q(coursestat__stat__name__in=stat)


        products = Course.objects.filter(q).distinct()

        results=[{  "course_id"      : product.id,
                    "thumbnail"      : product.thumbnail_image_url,
                    "user_name"      : product.user.name,
                    "sub_category"   : product.sub_category.name,
                    "course_name"    : product.name,
                    "price"          : product.price,
                    "payment_period" : product.payment_period,
                    "course_like"    : product.like_set.count()
                    } for product in products]

        return JsonResponse({"results" : results})

Los parámetros de consulta creados por Postman son los siguientes. Aquí puedes ver una descripción de la imagen.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual la intersección de inteligencia, fuerza y encanto de la variable stat no funciona es que la implementación actual del código utiliza el filtro “in” para verificar si el nombre de la stat está en la lista de valores de stat proporcionados en la solicitud. Esto solo dará una combinación de resultados y no una intersección.

    Para obtener la intersección de los valores de stat, puedes utilizar la notación “__all” en la consulta del filtro, de esta forma:

    if stat:
        q &= Q(coursestat__stat__name__all=stat)
    

    Esto filtrará los resultados solo a aquellos cursos que tengan todos los valores de stat especificados.

Comments are closed.