2015-01-21 16 views
6

Tôi có điều nàyLàm thế nào có thể lọc cha mẹ dựa trên trẻ em trong 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) 

Tôi đã queryset này

kids = Kid.objects.all()

Bây giờ tôi muốn lọc trẻ em toàn đồ chơi có tên star trong đó

và tôi không thể quyết định bộ lọc nào áp dụng

kids.filter(toys_set__icontains='star')

+0

@alecxe xin lỗi đó là lỗi đánh máy – user3214546

Trả lời

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

Lưu ý phương pháp distinct(). Điều này là bắt buộc vì trẻ có thể có một số đồ chơi "sao" vì vậy mà không có distinct() bạn sẽ nhận được các bản sao trong bộ truy vấn.

Nếu bạn muốn lọc trẻ em theo số lượng đồ chơi được tìm thấy khi sử dụng aggregation:

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

nhưng Kid không có bất kỳ lĩnh vực đồ chơi. không phải là nó 'toy_set' – user3214546

+0

Đọc tài liệu về mối quan hệ" ngược lại ": https://docs.djangoproject.com/en/1.7/topics/db/queries/#lookups-that-span-relationships – catavaran

+0

@thanks for clearing nghi ngờ của tôi. làm thế nào tôi có thể truy vấn nơi đứa trẻ có nhiều hơn 4 đồ chơi – user3214546

Các vấn đề liên quan