2015-03-11 9 views
10

मैंने कल PyCharm 4.0.5 में अपडेट किया था और तब से यह कुछ त्रुटि के रूप में कुछ पूर्ण मान्य कोड को चिह्नित कर रहा है। असल में कोड सिर्फ कई लोगों के रिश्ते पर फिर से चल रहा है। कोड नीचे दिखाया गया है।क्या यह PyCharm 4.0.5 में एक बग है?

songs = [] 
for album in order.album_products.all(): 
    album_songs = Song.objects.filter(album__exact=album.album_product.id) 
    if not album_songs: 
     for song in album_songs: 
      songs.append(song) 

लाइन है कि त्रुटि दिखा रहा है यह एक है:

for album in order.album_products.all(): 

और त्रुटि है कि दिखाया गया है इस एक है:

Call 'all' directly on 'many-to-many with intermediate'. method 'all' can't be used with many-to-many relations if intermediate model is used. 

मैं इस पर स्टम्प्ड रहा हूँ। जब तक मैं याद कर सकता हूं तब तक इस कोड ने Django में ठीक काम किया है। मैं संस्करण 1.0 या 1.1 के बाद से Django का उपयोग कर रहा हूं और इस विधि का उपयोग कर कई सारे रिश्तेदारों पर हमेशा से उत्साहित हूं। Stackoverflow उत्तरों को भी देखकर एक ही कोड दिखाता है जो कई अन्य लोगों द्वारा भी उपयोग किया जाता है।

क्या किसी के पास कोई सुझाव है?

+0

कोई मध्यवर्ती मॉडल नहीं है, यह वास्तव में – dashesy

उत्तर

15

मुझे एक त्रुटि की तरह लगता है। मुझे नहीं पता कि

विधि 'सभी' का उपयोग कई-से-कई संबंधों के साथ नहीं किया जा सकता है यदि इंटरमीडिएट मॉडल का उपयोग किया जाता है।

से आ रहा है, लेकिन मुझे इसे Django दस्तावेज़ों में नहीं मिल रहा है। वास्तव में, Django डॉक्स एक उदाहरण में इसे इस्तेमाल करता है, खंड "Extra fields on many-to-many relationships" में:

>>> beatles.members.all() 

इस बग PyCharm में already reported है।

+0

आह, धन्यवाद। मैंने नहीं देखा कि पहले ही रिपोर्ट की गई है। – Cromulent

1

https://docs.djangoproject.com/en/1.7/topics/db/models/#extra-fields-on-many-to-many-relationships के रूप में उत्तर देने के लिए उत्सुक beatles.members.all() के समान कोड दिखाता है। लेकिन इस मामले में, त्रुटि में उल्लिखित intermediate model का उपयोग करके शायद अधिक कुशल हो सकता है।

लेकिन ध्यान रखें कि आप एल्बम_प्रॉडक्ट्स के प्रति एल्बम के दो प्रश्न पूछते हैं, क्योंकि album.album_product.id एक प्रश्न है।

album_songs = Song.objects.filter(album__album_product=album.album_product_id) 
+0

एक प्रतिगमन है। प्रलेखन ने हमेशा एक बहुत से रिश्तेदार संबंधों को फिर से शुरू करने के लिए उस पद्धति का उपयोग किया है। नए PyCharm संस्करण में इसके लिए कुछ "फिक्सेस" हैं और ऐसा लगता है कि उन्होंने थोड़ा सा मुकाबला किया है। मैं हमेशा एक मध्यवर्ती मॉडल का उपयोग कर सकता हूं लेकिन मुझे अभी तक दक्षता में दिलचस्पी नहीं है, मुझे यह जानने में दिलचस्पी है कि हम में से कौन सा गलत है। क्या PyCharm गलत है या मैं गलत हूँ? – Cromulent

+0

जैसा कि प्रलेखन में 'दस्तावेज़ीकरण' संस्करण में भी उदाहरण है, मुझे लगता है कि आप सही हैं। – Blackeagle52

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