2012-08-23 34 views
7

ManyToMany ilişkisinde iki modelim (Olay ve KullanıcıProfil) var. Sadece onlarla ilişkili belirli bir kullanıcı sayısından daha az olan Olayları seçmek istiyorum. Dolayısıyla, şu ana kadar 4 kişiden az kayıtlı olan etkinlikler seçilmelidir. views.py olarakManyToMany nesnelerine göre Django sorgu filtresi

Böyle bir şey var ama çalışmıyor: gibi models.py görünüm

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

ilgili bölümleri: sanırım

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) 

Doğru değilim Her etkinlikte tüm Userprofiles ile filtrelemek, ancak nasıl yapacağımı bilmiyorum.

Yardımcı olabilir misiniz?

+0

Lütfen ORM ile birlikte bir toplanma ve toplama için dokümanlar veya google'a bir göz atın, başlamanız gerekir. – Jingo

+0

Yaptım. Daha spesifik tavsiyeler arıyorum. Verilen standart filtreler, bir dizi yerine tek bir ilişkili model nesnesinin belirli niteliklerine göre filtrelenmiş gibi görünmektedir. Sanırım biraz daha ezoterik görünen bir bilgi arıyorum. – KindOfGuy

+0

Uha, Yuji'nin tavsiyesine bakarak, söylediklerine bakmadığımı fark ettim. Tavsiye için teşekkürler! – KindOfGuy

cevap

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

Mükemmel! Tabii ki, django.db.models import Count 'i models.py'ye eklemeliydim, ama bu işe yaradı. Yuji, çok güçlü ve önemli bir insansın. – KindOfGuy