Saltar al contenido

Django Queryset con filtrado en clave externa inversa

Solución:

Si, creo que quieres

make = Make.objects.get(pk=1)
make.make_content_set.filter(published=True)

o tal vez

make_ids = MakeContent.objects.filter(published=True).values_list('make_id', flat=True)
makes = Make.objects.filter(id__in=make_ids)

Sé que esta es una pregunta muy antigua, pero estoy respondiendo. Creo que mi respuesta puede ayudar a otros. He cambiado un poco el modelo de la siguiente manera. He usado Django 1.8.

class Make(models.Model):
    name = models.CharField(max_length=200)

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

He utilizado el siguiente conjunto de consultas.

Make.objects.filter(makecontent__published=True)

Espero que te ayude.

Django no es compatible con select_related() método para búsquedas de claves foráneas inversas, por lo que lo mejor que puede hacer sin salir de Python son dos consultas de base de datos. El primero es agarrar todos los Makes que contienen MakeContents dónde published = True, y el segundo es agarrar todos los MakeContents dónde published = True. A continuación, debe recorrer y organizar los datos como desee. Aquí hay un buen artículo sobre cómo hacer esto:

http://blog.roseman.org.uk/2010/01/11/django-patterns-part-2-efficient-reverse-lookups/

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *