मैं एक डीजेंगो डेटाबेस बनाने की कोशिश कर रहा हूं जो मेरी सभी कॉमिक खरीद रिकॉर्ड करता है, और मैंने कुछ समस्याएं निभाई हैं। मैं एक कॉमिक मुद्दे और कलाकारों के बीच संबंधों को मॉडल करने की कोशिश कर रहा हूं।रिश्तों पर अतिरिक्त डेटा के साथ कई रिश्तों के लिए कई
एक कॉमिक मुद्दे में इस मुद्दे पर काम कर रहे एक या अधिक कलाकार हैं, और एक कलाकार एक से अधिक मुद्दों पर काम करेगा। इसके अलावा, कलाकार के कॉमिक निर्माता (उस मुद्दे पर सभी काम), लेखक (स्क्रिप्ट लिखे गए), दराज (पूर्ण कॉमिक खींचा), पेंसिल, स्याही, रंग या पाठ पर किए गए कार्यों से संबंधित एक भूमिका है, और किसी भी भूमिका में कई कलाकार हो सकते हैं।
यह मेरे जैसे एक डेटाबेस मॉडल देता है:
मैं उसके बाद निम्न Django मॉडल में इस अनुवाद करते हैं। मैं रिश्ते पर अतिरिक्त डेटा की आवश्यकता होती है के रूप में, मेरा मानना है कि मैं रिश्ते को संभालने के लिए एक अलग वर्ग का उपयोग करने के लिए, और पकड़ अतिरिक्त
class Artist(models.Model):
name = models.CharField(max_length = 100)
def __unicode__(self):
return self.name
class ComicIssue(models.Model):
issue_number = models.IntegerField()
title = models.TextField()
artists = models.ManyToManyField(Artist, through='IssueArtist')
def __unicode__(self):
return u'issue = %s, %s' % (self.issue_number, self.title)
class IssueArtist(models.Model):
roles = ((0, "--------"),
(1, "Creator"),
(2, "Writer"),
(3, "Drawer"),
(4, "Pencils"),
(5, "Inks"),
(6, "Colours"),
(7, "Text"),
)
artist = models.ForeignKey(Artist)
issue = models.ForeignKey(ComicIssue)
role = models.IntegerField(choices = roles)
मेरे सवाल कर रहे हैं है:
1) यह एक सही प्रतीत होता है इसे मॉडलिंग का तरीका?
2) यदि मैं through='IssueArtist'
सुविधा का उपयोग नहीं करता, तो मैं artists.add()
फ़ंक्शन का उपयोग करके संबंध जोड़ सकता हूं। अगर मैं इसका उपयोग करता हूं, तो मुझे 'ManyRelatedManager' object has no attribute 'add'
त्रुटि मिलती है। क्या मुझे IssueArtist()
उदाहरण बनाकर रिश्ते को मैन्युअल रूप से प्रबंधित करना है, और स्पष्ट रूप से रिलेशनशिप टेबल खोजना है? एनबी। मैं
यह लिंक ठीक वही है जो मैं ढूंढ रहा था और खोजने में विफल रहा था। मुझे लगता है कि मुझे अपने खोज कौशल को देखने की ज़रूरत है। –
यह Django का असली 'मोटा समुद्र' हिस्सा है। त्रुटि संदेश भ्रामक है और ऐड/निर्माण विधियों को वास्तव में अपेक्षित कार्य करना चाहिए। इस उत्तर को पोस्ट करने के लिए धन्यवाद। – Rich
बस यह इंगित करते हुए कि a.save() अनावश्यक है यदि आप create() विधि का उपयोग कर रहे हैं। https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.create –