2011-09-19 11 views
8

मैंने हाल ही में अपने Django परियोजना में माइग्रेशन के लिए दक्षिण का उपयोग करना शुरू कर दिया है। हाल ही में जब तक मैं एक असाधारण मुद्दे में भाग गया, तब तक सब ठीक चल रहे थे।दक्षिण में विभिन्न माइग्रेशन ऑर्डर क्या करता है?

मेरे पास मेरे प्रोजेक्ट में दो ऐप हैं, ऐप-ए और ऐप-बी। ऐप-ए में एक मॉडल में ऐप-बी में एक मॉडल के लिए एक विदेशी कुंजी है। जब मैं अपना सिस्टम बनाने की कोशिश कर रहा हूं, तो मैंने syndb चलाया जिसने सभी auth_ और south_ टेबल बनाए। तब मैं migrate भाग गया जो त्रुटियों को फेंक दिया। जब ऐप-ए से मॉडल बनाने का प्रयास किया गया, जिसने ऐप-बी के मॉडल का संदर्भ दिया, मॉडल ऐप-बी अभी तक माइग्रेट/बनाया नहीं गया था और इसलिए त्रुटि।

इसे हल करने के लिए, मुझे मैन्युअल रूप से ऐप-बी माइग्रेट करना था और फिर ऐप-ए। क्या मुझसे यहां कुछ गलत हो रहा है? दक्षिण में एप्स में माइग्रेशन ऑर्डर कैसे जानना चाहिए?

धन्यवाद।

उत्तर

16

इससे यह https://south.readthedocs.io/en/latest/dependencies.html समझाया गया। क्षुधा के लिए

माइग्रेशन अच्छे हैं 'एन सब है, लेकिन जब आप एक बड़ी परियोजना लेखन, क्षुधा का एक बहुत के साथ शुरू, आपको लगता है कि आप क्षुधा और किस क्रम माइग्रेशन होगा जरूरत काम के बीच विदेशी कुंजी रिश्ते हैं प्रत्येक ऐप के लिए आवेदन किया जाना सिर्फ दर्दनाक है।

सौभाग्य से, हमें यह समस्या भी थी, इसलिए दक्षिण में निर्भरता प्रणाली है। माइग्रेशन के अंदर, आप यह घोषणा कर सकते हैं कि यह ऐप को पहले एक निश्चित माइग्रेशन चलाने पर निर्भर करता है; उदाहरण के लिए, यदि मेरे ऐप "मंच" "खाते" पर निर्भर करता है ऐप अपने उपयोगकर्ता प्रोफ़ाइल टेबल बनाया है, हम कर सकते हैं:

# forum/migrations/0002_post.py class Migration: 

    depends_on = (
     ("accounts", "0003_add_user_profile"), 
    ) 

    def forwards(self): 

फिर, अगर आप कोशिश करते हैं और मंच में करने के लिए या 0002_post परे विस्थापित ऐप, यह पहले सुनिश्चित करेगा कि खातों को कम से कम तक 0003_add_user_profile तक माइग्रेट किया गया है, और यदि यह आपके लिए माइग्रेट नहीं करेगा।

निर्भरता भी विपरीत में काम करती है; दक्षिण को 0003_add_user_profile माइग्रेशन को पूर्ववत नहीं करना है जब तक कि उसने 0002_post माइग्रेशन को पूर्ववत नहीं किया है।

आप कई निर्भरताओं, और सभी प्रकार के निराला संरचनाओं को प्राप्त कर सकते हैं; वहाँ बहरहाल, दो नियम हैं:

कोई परिपत्र निर्भरता नहीं ऊपर की तरफ एक ही अनुप्रयोग में निर्भरता (प्रत्येक अन्य के आधार पर दो या अधिक माइग्रेशन) (ताकि आप 0002_post मंच अनुप्रयोग में 0003_room पर निर्भर नहीं कर सकते एक ही अनुप्रयोग में, या तो सीधे या एक निर्भरता श्रृंखला के माध्यम से।

12

दक्षिण में सेटिंग में दिए गए क्रम में INSTALLED_APPS tuple में दिखाई देने वाले क्रम में ऐप्स माइग्रेट करता है। तो बस सुनिश्चित करें कि ऐप-बी आपके सेटिंग्स.py में ऐप-ए से पहले आता है, और इसे काम करना चाहिए :)

+0

बस इस ऊपर से मतदान क्योंकि यह वास्तव में काफी महत्वपूर्ण है। 'depends_on' और' needed_by' केवल वास्तविक माइग्रेशन नियंत्रित करने के लिए लगता है। यदि आप बस माइग्रेशन के साथ शुरू करना, मेरे मामले की तरह, दक्षिण माइग्रेशन पूर्ण होने के बाद ऐप के प्रारंभिक डेटा को लोड करने का प्रयास करेगा। मैं ऐप के शुरुआती दा के मुद्दों में भाग गया टा किसी अन्य के सामने उपलब्ध नहीं है जिसकी आवश्यकता है और विदेशी प्रमुख मुद्दों में भाग गया। मैं 'INSTALLED_APPS' में ऐप्स को फिर से ऑर्डर करके इसे हल करने में सक्षम था।साउथ इस क्रम में ऐप चलाता है कि वे 'INSTALLED_APPS' में हैं जो किसी भी माइग्रेशन निर्भरता को चलाने के लिए रोक रहे हैं। – jaywhy13

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