2012-05-22 15 views
25

मुझे एसओ के आसपास एक झुकाव था और यह नहीं मिला, लेकिन मुझे यकीन है कि यह कहीं कहीं है। इस संभावित डबल पोस्ट के लिए माफ़ी!Django - मैं मॉडल से एक विशेष कॉलम कैसे चुनूं?

अगर मैं इस कोड है:

return Story.objects.filter(user=request.user.id).order_by('-create_date') 

और कहते हैं कि कहानी है, उम, एक "विवरण" क्षेत्र, और मैं बस कि वर्णन फ़ील्ड चाहते , कुछ और वापस भेजने के लिए डाटाबेस के लिए कोई जरूरत नहीं मेरे परिणाम के साथ, मैं क्वेरी को पर केवल पर कैसे सीमित कर सकता हूं?

है, मैं कैसे इस एसक्यूएल उत्पन्न करते हैं:

select description from story where user_id = x order by create_date desc 

(जहां एक्स, request.user.id मूल्य है निश्चित रूप से)

+0

संभावित डुप्लिकेट [कैसे Django क्वेरी द्वारा रिटर्न स्तंभों को सीमित करने के?] (Http://stackoverflow.com/questions/2448978/how-to-limit-columns-returned-by-django-query) –

उत्तर

37

उपयोग values() या values_list()

आप values() उपयोग करते हैं, आप एक (तकनीकी रूप से एक ValuesQuerySet) शब्दकोशों की सूची

instance = MyModel.objects.values('description')[0] 
description = instance['description'] 

आप values_list() का उपयोग करते हैं, तो आप tuples की सूची के साथ पहुंच जाएंगे साथ पहुंच जाएंगे

instance = MyModel.objects.values_list('description')[0] 
description = instance[0] 

या यदि आपने अभी इस मामले में की तरह एक मूल्य मिल रहा है, तो आप values_list साथ flat=True kwarg का उपयोग मूल्यों की एक सरल सूची प्राप्त करने के लिए कर सकते हैं

description = MyModel.objects.values_list('description', flat=True)[0] 
+5

सही: 'वापसी Story.objects.filter (उपयोगकर्ता = request.user.id) .order_by ('- create_date')। मान ('वर्णन')' – Furbeenator

+3

@भारल कई बार मुझे मूल्यों की एक सूची मिलती है जो अधिक उपयोगी है tuples की एक सूची। – dm03514

+0

मूल्यों की सूची प्राप्त करने के लिए आप 'flat = True' को 'value_list' से पास कर सकते हैं, धन्यवाद, यह वही है जो मुझे – bharal

3

only method का उपयोग करें। कृपया प्रलेखन

+0

की आवश्यकता है, यह वास्तव में वापस पढ़ने के लिए' pk' ' – okm

+1

um भेजता है, जो मैंने अभी पढ़ा है: defer() विधि (और इसके चचेरे भाई, केवल(), नीचे) केवल उन्नत उपयोग-मामलों के लिए हैं। जब आप अपने प्रश्नों का बारीकी से विश्लेषण करते हैं और वास्तव में समझते हैं कि आपको कौन सी जानकारी चाहिए और यह माप लिया गया है कि आपको आवश्यक फ़ील्ड लौटने और मॉडल के लिए फ़ील्ड का पूरा सेट महत्वपूर्ण होने के बीच अंतर महत्वपूर्ण होगा। – bharal

1

दस्तावेज़ों के अनुसार, यदि आपका क्वेरी सेट केवल एक ऑब्जेक्ट उत्पन्न करने जा रहा है, तो यह अनुशंसा की जाती है कि आपको फ़िल्टर के बजाय get() का उपयोग करना चाहिए। आपके द्वारा दिए गए नाम से, मुझे लगता है कि user_id प्रत्येक उपयोगकर्ता के लिए अलग है। EDIT1: मैंने अभी ऑर्डरबी क्लॉज का नोटिस लिया है। इसलिए यदि मैं user_id अलग या पीके के साथ है तो मैं इस कोड का उपयोग करने का सुझाव दूंगा।

description = story.objects.filter('description').get(user_id=x) 
की
संबंधित मुद्दे