2015-01-21 10 views
6

ho questoCome può filtrare genitore basata sui bambini 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) 

Ho questo set di query

kids = Kid.objects.all()

Ora voglio filtrare i bambini giocattoli complesso ha nome star in esso

e non sono in grado di decidere quale filtro applicare

kids.filter(toys_set__icontains='star')

+0

@alecxe dispiace che era errore di battitura – user3214546

risposta

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

Nota il metodo distinct(). È necessario perché il bambino può avere diversi giocattoli "a stella", quindi senza distinct() si otterranno duplicati nel set di query.

Se si desidera filtrare i bambini in base al numero di giocattoli trovati quando l'uso aggregation:

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

ma Kid non hanno alcun campo giocattolo. non è 'toy_set' – user3214546

+0

Leggere la documentazione per la relazione" reverse ": https://docs.djangoproject.com/en/1.7/topics/db/queries/#lookups-that-span-relationships – catavaran

+0

@thanks per la compensazione il mio dubbio come posso interrogare dove il bambino ha più di 4 giocattoli – user3214546

Problemi correlati