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/