Cómo filtrar Doble filtro inverso usando Django ORM

Hola estoy teniendo la siguiente estructura modelo

class Product:
   size = models.CharField(max_length=200)


class Make(models.Model):
    make_content = models.ForeignKey(Product, related_name='make_set')
    department = models.CharField(max_length=200)


class MakeContent(models.Model):
    make = models.ForeignKey(Make, related_name='make_content_set')
    published = models.BooleanField()

Si necesito filtrar Producto según Hacer que pueda usar nombre relacionado

qs = Product.objects.filter(make_set__department = "Sample")

Está bien.

Ahora lo que necesito es que necesito filtrar el Producto según MakeContent

He probado esto.

qs = Product.objects.filter(make_set__make_content_set__published = True)

Esto no está funcionando, ¿hay alguna otra idea?

Pregunta hecha hace 3 años, 4 meses, 28 días - Por bytebard30f9


2 Respuestas:

  • Para filtrar un Producto según MakeContent, puedes hacerlo de la siguiente manera en Django ORM:

    python
    qs = Product.objects.filter(make_set__make_content_set__published=True)
    

    Sin embargo, si el código anterior no está funcionando, puedes probar con la siguiente forma para hacer un doble filtro inverso:

    python
    qs = Product.objects.filter(make_set__make_content_set__in=MakeContent.objects.filter(published=True))
    

    Esta consulta filtrará los Productos que tienen asociados elementos en MakeContent que tengan el campo 'published' igual a True.

    Prueba con esta forma y verifica si te da el resultado esperado.

    Respondida el Dec 19, 2020 a las 06:45 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para filtrar Product por MakeContent, utiliza el doble guión invertido (__). La sintaxis para hacer una doble unión inversa es:

    
    Product.object.filter(make_set__make_content__campo_a_comparar = valor)
    

    En tu caso, el filtro debería ser:

    
    products = Product.object.filter(make_set__make_content__publishe = True)
    

    Esto devolverá todos los Product que están relacionados con un Make que tenga al menos un MakeContent con publishe establecido en True

    Respondida el Dec 19, 2020 a las 06:53 - por Gemini

    Votos positivos: 0 | Votos negativos: 0