2010-10-17 19 views
7

मेरे पास इस तरह के मॉडल हैं।django विदेशी कुंजी

class Mp3(models.Model): 
    title=models.CharField(max_length=30) 
    artist=models.ForeignKey('Artist') 

और यहाँ कैसे कलाकार मॉडल लग रहा है की तरह है:?

class Artist(models.Model): 
    name=models.CharField(max_length=100,default="Unknown") 

मैं आईडी 1. मैं एक एमपी 3 है कि इस कलाकार को सौंपा गया है कैसे बना सकते हैं के साथ कलाकार बनाया है (मैं इसे की जरूरत है चाहता हूँ उदाहरण के लिए इस तरह क्वेरी के लिए।

mp3=Mp3.objects.get(id=50) 
mp3.artist 

) मैं इस

newMp3=Mp3(title="sth",artist=1) 
तरह sth की कोशिश की है

लेकिन मैं

ValueError: Cannot assign "1": "Mp3.artist" must be a "Artist" instance. 

मैं त्रुटि को समझने के बाद भी आपको यह कैसे हल करने के लिए पता नहीं है की तुलना में मिला है। किसी भी मदद के लिए धन्यवाद बेस्ट सादर

+1

ठीक है मुझे दस्तावेज़ों की समस्या हल हो गई है – John

+4

क्या आप यहां प्रश्नोत्तर और भविष्य की पीढ़ियों की पूर्णता के लिए उत्तर पोस्ट कर सकते हैं? – OmerGertel

उत्तर

9
artist = Artist.objects.get(id=1) 
newMp3 = Mp3(title="sth", artist=artist) 
+0

यह समाधान है – John

2

जवाब होगा:

newMp3=Mp3(title="sth", artist=the_artist) 

जहां 'the_artist' एक Artist

14

का एक वास्तविक उदाहरण है मुझे लगता है कि डेटाबेस से कलाकार हो रही एमपी 3 मॉडल में इसे अनावश्यक रूप से जोड़ने के लिए, यदि आपके पास पहले से ही कलाकार आईडी है तो आपको ऐसा कुछ करना चाहिए:

new_mp3 = Mp3(title='Cool song', artist_id=the_artist_id) 
new_mp3.save() 

ध्यान दें कि _ id कलाकार पैरामीटर में, जैंगो भंडार एक क्षेत्र में विदेशी कुंजी आईडी FIELD_NAME के ​​अनुसार प्लस का गठन _ id तो आप विदेशी कुंजी आईडी सीधे उस क्षेत्र के लिए डेटाबेस के लिए जाने की आवश्यकता बिना पारित कर सकते हैं फिर कलाकार वस्तु प्राप्त करने के लिए।

यदि आपको अपने कोड में किसी अन्य चीज़ के लिए कलाकार ऑब्जेक्ट की आवश्यकता नहीं है तो आपको इस दृष्टिकोण का उपयोग करना चाहिए।

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