2012-08-23 15 views
7

मेरे पास कई मॉडल (इवेंट और यूजरप्रोफाइल) हैं जो कई लोगों के संबंध में हैं। मैं उन घटनाओं को चुनना चाहता हूं जिनके पास उनके साथ जुड़े उपयोगकर्ताओं की एक निश्चित संख्या से कम है। ऐसे कार्यक्रम जहां 4 से कम लोगों ने अभी तक साइन अप किया है, का चयन किया जाना चाहिए।कई टैटनी वस्तुओं की संख्या से Django क्वेरी फ़िल्टर

views.py में मैं कुछ इस तरह की है, लेकिन यह काम नहीं कर रहा:

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

तरह models.py देखो के प्रासंगिक भागों:

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) 

मुझे लगता है कि मैं सही ढंग से नहीं कर रहा हूँ प्रत्येक घटना पर सभी उपयोगकर्ता प्रोफाइल के साथ फ़िल्टरिंग, लेकिन मुझे नहीं पता कि यह कैसे करें।

क्या आप मदद कर सकते हैं?

+0

कृपया ओआरएम के साथ एनोटेशन और एग्रीगेशंस के लिए दस्तावेज़ों या Google पर नज़र डालें, आपको शुरू करना चाहिए। – Jingo

+0

मैंने किया है। मैं और अधिक विशिष्ट सलाह की तलाश में हूं। दिए गए मानक फ़िल्टर एक सेट के बजाय एक एकल संबंधित मॉडल ऑब्जेक्ट के विशिष्ट विशेषताओं के अनुसार फ़िल्टर करने लगते हैं। मुझे लगता है कि मैं ऐसी जानकारी की तलाश में हूं जो थोड़ा और गूढ़ लगता है। – KindOfGuy

+0

उहा, नीचे यूजी की सलाह को देखते हुए, मुझे एहसास हुआ कि मैंने जो कहा है उसमें मैंने देखा नहीं है। सलाह के लिए धन्यवाद! – KindOfGuy

उत्तर

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

शानदार! मुझे मॉड्यूल.py में django.db.models आयात गणना' से जोड़ना था, लेकिन यह काम किया है। यूजी, आप एक बहुत मजबूत और महत्वपूर्ण नागरिक हैं। – KindOfGuy

संबंधित मुद्दे