2015-01-21 16 views
6

mam toJak można filtrować rodzica w oparciu o dzieci w 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) 

mam ten queryset

kids = Kid.objects.all()

Teraz chcę filtrować dzieciom całe zabawki ma nazwę star w nim

i nie można określić, który filtr zastosować

kids.filter(toys_set__icontains='star')

+0

@alecxe przykro, że była literówka – user3214546

Odpowiedz

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

Uwaga metoda distinct(). Jest to wymagane, ponieważ dziecko może mieć kilka "gwiazd" zabawek, więc bez numeru distinct() otrzymasz duplikaty w zapytaniu.

Jeśli chcesz filtrować dzieci przez liczbę znalezionych zabawek gdy użycie aggregation:

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

ale dziecko nie ma żadnego pola zabawki. czyż nie jest to "toy_set" – user3214546

+0

Przeczytaj dokumentację dotyczącą relacji "wstecz": https://docs.djangoproject.com/en/1.7/topics/db/queries/#lookups-that-span-relationships – catavaran

+0

@ thanks for clearing moje wątpliwości. jak mogę zapytać, gdzie dziecko ma więcej niż 4 zabawki – user3214546

Powiązane problemy