2012-08-23 20 views
7

Tôi có hai mô hình (Sự kiện và UserProfile) trong quan hệ ManyToMany. Tôi muốn chỉ chọn những Sự kiện có ít hơn số lượng Người dùng nhất định được liên kết với họ. Vì vậy, các sự kiện có ít hơn 4 người đã đăng ký nên được chọn.Bộ lọc truy vấn Django theo số đối tượng ManyToMany

Trong views.py Tôi có một cái gì đó như thế này nhưng nó không làm việc:

proposed_event_list = Event.objects.all().filter(userprofile__lt=4) 

Các bộ phận có liên quan của cái nhìn models.py như:

class Event(models.Model): 
    name = models.CharField(max_length=100) 
    date = models.DateTimeField('Event date') 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    event_commitments = models.ManyToManyField(Event, null=True, blank=True) 

Tôi đoán tôi không chính xác lọc với tất cả các Hồ sơ người dùng trên mỗi sự kiện, nhưng tôi không biết cách thực hiện.

Bạn có thể trợ giúp không?

+0

Vui lòng xem tài liệu hoặc google để biết thông báo và tổng hợp với ORM, sẽ giúp bạn bắt đầu. – Jingo

+0

Tôi đã làm. Tôi đang tìm lời khuyên cụ thể hơn. Các bộ lọc tiêu chuẩn được cung cấp dường như lọc theo các thuộc tính cụ thể của một đối tượng mô hình liên quan duy nhất chứ không phải là một bộ của chúng. Tôi cho rằng tôi đang tìm kiếm thông tin có vẻ bí truyền hơn một chút. – KindOfGuy

+0

Uha, nhìn vào lời khuyên của Yuji bên dưới, tôi nhận ra tôi đã không nhìn vào những gì bạn nói. Cảm ơn vì lời khuyên! – KindOfGuy

Trả lời

11
Event.objects.annotate(c=Count('userprofile')).filter(c__lt=4) 
+0

Thật tuyệt vời! Tôi đã phải thêm 'từ django.db.models Count count' vào models.py, tất nhiên, nhưng điều này đã làm việc. Yuji, bạn là một công dân rất mạnh và quan trọng. – KindOfGuy