2012-04-28 11 views
19

मेरे पास निम्नलिखित मॉडल से संबंधित एक प्रश्न है। मैं व्यवस्थापक से इसे करने के बजाय Views.py से ManyToManyField को पॉप्युलेट करना चाहता हूं।Django: ManyToManyField में डेटा कैसे सहेजते हैं?

लेकिन मैं genres फ़ील्ड में डेटा कैसे जोड़ूं जो ManyToManyField है?

views.py

content = Movie_Info(id = m_id, 
        title = data[0].get('title'), 
        overview = data[0].get('overview'), 
        release_date = data[0].get('release_date'), 
       ) 
content.save() 

models.py

class Movie_Info_genre(models.Model): 
    genre = models.CharField(max_length=100) 

class Movie_Info(models.Model): 
    id    = models.IntegerField(primary_key=True) 
    title   = models.CharField(max_length=100, blank=True, null=True) 
    overview  = models.TextField(blank=True, null=True) 
    release_date = models.CharField(max_length=10, blank=True, null=True) 
    genres   = models.ManyToManyField(Movie_Info_genre) 
+3

असंबंधित स्टाइल सलाह: पायथन/डैंजो में, यह अंडरस्कोर का उपयोग करने के बजाय कक्षाओं 'मूवीइन्फो' या 'मूवीइन्फोरेन' (या सिर्फ 'मूवीजेंर' या यहां तक ​​कि 'जेनर') नाम देने के लिए दृढ़ता से अनुकूल है। साथ ही, यह शायद एक एसओ स्वरूपण समस्या है, लेकिन 'सामग्री' बनाते समय आपके पास हास्यास्पद मात्रा में इंडेंटेशन है। :) इसके अलावा, 'release_date' शायद 'डेटफ़िल्ल्ड' होना चाहिए। – Dougal

+0

@Dougal, सलाह के लिए धन्यवाद। इंडेंटेशन के संबंध में मैं एक प्लगइन का उपयोग कर रहा हूं जो मेरे लिए करता है;) – starcorn

+1

प्लस, मॉडल में विशेष "आईडी" फ़ील्ड की आवश्यकता नहीं है। Django स्वचालित रूप से आपके लिए यह करता है। –

उत्तर

31

उपयोग add method for related fields:

# using Model.object.create is a shortcut to instantiating, then calling save() 
myMoveInfo = Movie_Info.objects.create(title='foo', overview='bar') 
myMovieGenre = Movie_Info_genre.objects.create(genre='horror') 
myMovieInfo.genres.add(myMoveGenre) 

के विपरीत अन्य क्षेत्रों को संशोधित करने, दोनों मॉडल में मौजूद होना चाहिए databa ऐसा करने से पहले, इसलिए आपको कई से अधिक रिश्तों को जोड़ने से पहले save पर कॉल करना होगा। चूंकि जोड़ तुरंत डेटाबेस को प्रभावित करता है, आपको बाद में सहेजने की आवश्यकता नहीं है।

+0

धन्यवाद, मुझे इसके लिए एक और सवाल भी था। शैली अद्वितीय होना चाहिए। निम्न कोड के साथ यदि एक ही शैली दो बार जोड़ दी जाती है तो यह त्रुटि बढ़ाएगी। तो मुझे आश्चर्य है, क्या मुझे उस त्रुटि को पकड़ना चाहिए और इसके बारे में कुछ करना चाहिए। या इस समस्या को हल करने के लिए कोई बेहतर तरीका है? – starcorn

+0

इसके बजाय [Model.object.get_or_create] (https://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create) का उपयोग करें। – Jeff

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