2011-04-23 17 views
5

से ऑब्जेक्ट प्राप्त करें। मैं एक प्रश्नोत्तरी मालिक के प्रश्नोत्तरी पर सभी Guesses की सूची खींचने के लिए "समूह द्वारा" के बराबर करने की कोशिश कर रहा हूं, समूहीकृत उपयोगकर्ता द्वारा और उपयोगकर्ता द्वारा किए गए कितने अनुमानों की गिनती के साथ एनोटेटेड।एनोटेशन के माध्यम से Django "समूह द्वारा" प्राप्त करें: .value() बनाम एक आईडी

प्रासंगिक मॉडल:

class Quiz(models.Model): 
    user = models.ForeignKey(User) 
    ... 

class Guess(models.Model): 
    user = models.ForeignKey(User) 
    quiz = models.ForegnKey(Quiz) 
    ... 

इस क्वेरी:

guessors = Guess.objects.filter(quiz__user=request.user).values('user').annotate(cnt=Count('user')).order_by('cnt') 

इस तरह रिटर्न कुछ, जो बहुत ही के करीब मैं क्या जरूरत है:

{'cnt': 5, 'user': 5} 
{'cnt': 3, 'user': 4} 
{'cnt': 2, 'user': 3} 
{'cnt': 1, 'user': 2} 

हालांकि, ध्यान दें कि 'उपयोगकर्ता' को एक int के रूप में वापस किया जाता है जब मैं एक पूर्ण उपयोगकर्ता वस्तु के रूप में चाहता हूं। इस बारे में कोई सुझाव है कि मुझे पूर्ण उपयोगकर्ता वस्तु को सबसे कुशलता से कैसे प्राप्त करना चाहिए?

+0

नोट: मैं Django 1.3 पर हूँ – mitchf

उत्तर

4

Django के साथ अपने छोटे लेकिन गहन समय में, मैंने पाया है कि group_by फ़ंक्शन उन SQL सुविधाओं में से एक है जिन्हें मैं सबसे ज्यादा याद करता हूं। मैंने उपर्युक्त मानों() समेकन विधि का प्रयास किया है, लेकिन वही समस्या थी जहां मैं एक ऑब्जेक्ट लौटा था। मैं raw SQL का उपयोग कर समाप्त हुआ, जो सुंदर नहीं था लेकिन मुझे जो चाहिए था उसके लिए काम किया।

1

एक विकल्प डबल अंडरस्कोर नोटेशन का उपयोग करके सभी उपयोगकर्ता फ़ील्ड को आजमाने और प्राप्त करने का विकल्प है, उदाहरण के लिए आप मूल्यों ('user_ उपयोगकर्ता नाम', 'उपयोगकर्ता _someOtherField') जैसे कुछ कर सकते हैं। मुझे पूरा उपयोगकर्ता ऑब्जेक्ट प्राप्त करने के बारे में निश्चित नहीं है शायद किसी और के साथ और अधिक सहायता हो सकती है।

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