Django Queryset con filtro sulla chiave esterna inversa



Answers

Sì, penso che tu voglia

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

o forse

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

Ho il seguente modello Django:

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

class MakeContent:
   make = models.ForeignKey(Make)
   published = models.BooleanField()

Mi piacerebbe sapere se è possibile (senza scrivere direttamente SQL) per generare un queryset che contenga tutti i Make e i relativi MakeContent relativi a dove è published = True .




So che questa è una domanda molto vecchia, ma sto rispondendo. Poiché penso che la mia risposta possa aiutare gli altri. Ho cambiato il modello un po 'come segue. Ho usato 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()

Ho usato il seguente queryset.

Make.objects.filter(makecontent__published=True)

Spero che ti sarà d'aiuto.






Links