2010-06-14 21 views
6

से परिणामों की संख्या प्राप्त करें I कच्ची क्वेरी का उपयोग कर रहा हूं और मुझे यह पता लगाने में परेशानी हो रही है कि यह कितने परिणाम लौटाता है। क्या उधर रास्ता है?Django के कच्चे() क्वेरी फ़ंक्शन

संपादित

.count() काम नहीं करता है। यह लौटाता है: 'RawQuerySet' ऑब्जेक्ट में कोई विशेषता नहीं है 'गिनती'

उत्तर

11

मुझे लगता है कि आप raw() क्वेरीसेट विधि के बारे में बात कर रहे हैं। यह किसी अन्य की तरह एक क्वेरीसेट देता है। तो निश्चित रूप से आप .count() पर कॉल कर सकते हैं, जैसा कि आप किसी भी अन्य ओआरएम क्वेरी पर करेंगे।

संपादित करें दिखाता है कि जब आप चेक नहीं करते हैं तो क्या होता है। जैसा कि आप ध्यान देते हैं, .raw() एक RawQuerySet देता है जिसमें कोई गिनती विधि नहीं है - और न ही यह len() का समर्थन करता है।

sum(1 for result in results) 
+0

पर काम करता है मैं इस कोशिश की है। मुझे मिलता है: 'RawQuerySet' ऑब्जेक्ट में कोई विशेषता नहीं है 'गिनती' – Galen

+0

मुझे लगा कि कोई विधि नहीं थी। बहुत बहुत धन्यवाद। – Galen

+0

यह क्वेरी को मूल्यांकन करने के लिए मजबूर करता है? – Dejell

12

तुम भी यह पहली बार एक सूची के लिए इतना की तरह, लंबाई प्राप्त करने के लिए डाली कर सकते हैं::

results = ModelName.objects.raw("select * from modelnames_modelname") 
len(list(results)) #returns length 

यह वह जगह है लंबाई प्राप्त करने के लिए एक ही रास्ता क्वेरीसमूह के माध्यम से पुनरावृति और उन्हें गिनती करने के लिए है यदि आप टेम्पलेट्स में RawQuerySet में प्रविष्टियों की लंबाई या यहां तक ​​कि अस्तित्व का अस्तित्व भी चाहते हैं तो आवश्यक है। बस ऊपर की तरह लंबाई को सटीक करें, और इसे टेम्पलेट के पैरामीटर के रूप में पास करें।

+3

यह क्वेरी को मूल्यांकन करने के लिए मजबूर करता है? यदि आप केवल गिनती चाहते हैं, तो यह महंगा है। – SK9

+0

जैसा कि @ एसके 9 ने कहा: यह महंगा है। –

1

गणना RawQuerySet

 

ModelName.objects.raw("select 1 as id , COUNT(*) from modelnames_modelname") 

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