2012-06-01 18 views
38

मैं अलग विदेशी कुंजी की एक सूची प्राप्त करने के लिए कोशिश करते हैं और मैं यह लिखा प्राप्त करें:Django मॉडल - अलग मूल्य सूची

my_ids = Entity.objects.values('foreign_key').distinct() 

लेकिन मैं सिर्फ UNDISTINCT विदेशी कुंजी की एक सूची प्राप्त ... मैं क्या याद आ रही है?

धन्यवाद! आप पहले से ही उन्हें एक सूची के रूप में है, तो

Entity.objects.order_by().values_list('foreign_key', flat=True).distinct() 

उत्तर

28

Thats! दोनों समाधान अभ्यस्त 100% काम ... लेकिन मैं एक तरह से उन्हें :)

संयुक्त MySQL-डेटाबेस के लिए अलग does not काम करने के लिए एक तर्क (AFAIK)

यह एक काम करता है और रिटर्न सिर्फ एक वस्तु पासिंग:

Entity.objects.order_by('foreign_key').values('foreign_key').distinct()

लेकिन धन्यवाद वैसे भी :)

+4

मेरे पास पोस्टग्रेस 9 .1 डेटाबेस, Django == 1.5.5 पर एक ही समस्या है। Order_by को जोड़ने में मदद मिली - बेवकूफ ... – kev

31

शायद आप इस के साथ जा सकते हैं। संकेत के लिए

+7

गलत। Order_by ('foregin_key') के बिना उपयोग किए जाने पर काम न करें। उदाहरण के लिए M2M पर (postgres, Django 1.8) – andi

3
Entity.objects.order_by('foreign_key').distinct('foreign_key') 

, तो एक set() को परिवर्तित अलग-अलग मान प्राप्त करने के लिए:

+0

इस सेट करने के लिए परिवर्तित सेट() सब कुछ स्मृति जहां के रूप में क्वेरीसमूह अपने अपने का मूल्यांकन तक लोड नहीं भरा जाएगा .. के साथ के रूप में स्मृति के संबंध में एक महंगा विचार है नहीं है और इस में कनवर्ट सूची चीज भी क्वेरीसेट का मूल्यांकन करेगा ?? –

15
Entity.objects.values_list('foreign_key', flat=True).distinct().order_by() 

अलग

द्वारा आदेश के साथ काम नहीं

किसी ऑर्डर_बी() कॉल में उपयोग किए गए किसी भी फ़ील्ड को SQL SELECT कॉलम में शामिल किया गया है। यह कभी-कभी अनपेक्षित परिणामों का कारण बन सकता है जब में विशिष्ट() के साथ संयोजन होता है। यदि आप किसी संबंधित मॉडल से फ़ील्ड्स द्वारा ऑर्डर करते हैं, तो वे फ़ील्ड चयनित कॉलम में जोड़े जाएंगे और वे अन्यथा डुप्लिकेट पंक्तियां अलग-अलग दिखाई दे सकती हैं। के बाद से अतिरिक्त कॉलम लौटे परिणामों में दिखाई नहीं है (उन्हें समर्थन आदेश को केवल देखते हैं), यह कभी कभी लग रहा है गैर विशिष्ट परिणामों की तरह लौटे जा रहा है।

इसी तरह, आप एक मूल्यों का उपयोग करता है, तो() क्वेरी कॉलम चयन किया है,() किसी भी order_by में इस्तेमाल कॉलम (या डिफ़ॉल्ट मॉडल आदेश) अभी भी शामिल किया जाएगा प्रतिबंधित करने के लिए और परिणाम की विशिष्टता को प्रभावित कर सकता।

यहाँ नैतिक है कि यदि आप अलग प्रयोग कर रहे हैं() संबंधित मॉडलों द्वारा आदेश के बारे में सावधान रहना है। इसी तरह, जब अलग-अलग() और मान() एक साथ उपयोग करते हैं, तो मान() कॉल में फ़ील्ड द्वारा ऑर्डर करते समय सावधान रहें।

https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct

+0

क्या आप थोड़ा और विस्तार कर सकते हैं? इस सवाल की मतदान दर को देखते हुए, यह कई लोगों के लिए एक मुद्दा है।यह कहने का आपका स्रोत क्या है? –

+0

मैं लगभग अपना दिमाग खो गया। इस समाधान के लिए धन्यवाद! – Crystal

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