2015-12-21 21 views
5

मुझे अपना खुद का इंटरमीडिएट मॉडल बनाना होगा।django में auto_created विशेषता का सही तरीके से उपयोग कैसे करें?

class class1(models.Model) 

class class2(models.Model): 
    field1 = models.ManyToManyField(class1, through="class3") 

class class3(models.Model): 
    field1 = models.ForeignKey(class1) 
    field2 = models.ForeignKey(class2) 
    field3 = models.IntegerField() 

    class Meta: 
     auto_created = True 

मैं का उपयोग करें "auto_created = सच" क्योंकि निम्न कोड में, मैं त्रुटि थी:

AttributeError:() एक ManyToManyField जो एक मध्यस्थ के मॉडल को निर्दिष्ट करता है पर जोड़ने का उपयोग नहीं कर सकते।

for m2m_field in self._meta.many_to_many: 
    for m2m_link in getattr(self, m2m_field.get_attname()).all(): 
     getattr(to_object, m2m_field.get_attname()).add(m2m_link) 

अब यह ठीक काम करता है, लेकिन जब मैं एक makemigration करने की कोशिश, Django मेरी class3 (मध्यवर्ती वर्ग) को हटाने के लिए चाहता है, और class2 में फ़ील्ड 1 में "के माध्यम से" विशेषता को हटाने।

मैं क्या गलत कर रहा हूं? कोई समाधान?

सभी को टक्स करें।

+0

मेरे पास एक ही समस्या है और यहां मेरा समाधान है (रेफरी: https://stackoverflow.com/questions/28693691/how-to-fake-migrations-for-not-to-create-a- विशिष्ट- existing -इंटरमीरी-टेबल) आप ऑटो जनरेटेड स्क्रिप्ट प्राप्त करने के लिए "makemigrations" चला सकते हैं, फिर वहां लागू और अनुपयोगी विधि को ओवरराइड करें ताकि जब आप "माइग्रेट" कमांड चलाते हैं तो उन परिचालनों को नहीं चलाया जाएगा। – user3099733

उत्तर

7

जहां तक ​​मुझे पता है, auto_createdMeta कक्षा में विशेषता अनियंत्रित है, इसलिए आपको इसका उपयोग करने से बचना चाहिए।

AttributeError कहता है, add() का उपयोग करना संभव है जो कई मध्यवर्ती मॉडल का उपयोग करने वाले कई क्षेत्रों के लिए add() का उपयोग करना संभव नहीं है। सही समाधान add() का उपयोग करने के बजाय इंटरमीडिएट मॉडल का उदाहरण बनाना है।

class3.objects.create(field_1=c1, field_2=c2, field_3=1). 

अधिक जानकारी के लिए extra fields in many to many relationships पर दस्तावेज़ देखें।

+0

हां, मुझे django दस्तावेज़ में auto_created विशेषता के बारे में कुछ भी नहीं मिला। धन्यवाद। – Raphael

+0

लेकिन, क्या आपको कोई विचार है कि django मेरी मध्यवर्ती कक्षा को क्यों हटाना चाहता है? – Raphael

+0

मैं 'auto_created' से परिचित नहीं हूं, इसलिए मुझे नहीं पता कि इससे Django आपके मध्यवर्ती वर्ग को हटाना क्यों चाहेंगे। मुझे लगता है कि यदि आप इसका उपयोग करना बंद कर देते हैं, तो Django अब मध्यवर्ती वर्ग को हटाना नहीं चाहेगा। – Alasdair

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