2015-01-21 7 views
6

ich dieseWie können Eltern auswählen, basierend auf Kinder in django

from django.db import models 

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

class Toy(models.Model): 
    name = models.CharField(max_length=200) 
    owner = models.ForeignKey(Kid) 

habe ich habe diese queryset

kids = Kid.objects.all()

Jetzt möchte ich Kinder ganze Spielzeug Name star darin

hat filtern

und ich bin nicht in der Lage zu entscheiden, welcher Filter angewendet werden soll

kids.filter(toys_set__icontains='star')

+0

@alecxe leider das war Typo – user3214546

Antwort

7
Kid.objects.distinct().filter(toy__name__icontains='star') 

Notiere die distinct() Methode. Es ist erforderlich, weil Kind mehrere "Stern" -Spielzeuge haben kann, so dass Sie ohne distinct() Duplikate im Queryset erhalten.

Wenn Sie wollen, dass Kinder filtern nach Anzahl der gefundenen Spielzeug bei Verwendung aggregation:

Kid.objects.distinct().filter(toy__name__icontains='star') \ 
         .annotate(toys_num=Count('toy')).filter(toys_num__gt=4) 
+0

aber Kid haben kein Spielzeug Feld. ist es nicht "toy_set" – user3214546

+0

Lesen Sie die Dokumentation für "umgekehrte" Beziehung: https://docs.djangoproject.com/en/1.7/topics/db/queries/#lookups-that-span-relationships – catavaran

+0

@ thanks zum Clearing mein Zweifel. Wie kann ich abfragen, wo Kind mehr als 4 Spielzeug hat – user3214546