2015-02-08 15 views
10

के साथ ऐप निकालें मैं जानना चाहता हूं कि Django माइग्रेशन का उपयोग करके हटाए गए ऐप के लिए सभी तालिकाओं को हटाने का सबसे साफ तरीका क्या है। उदाहरण के लिए यदि मैं एक नया पैकेज स्थापित करता हूं, तो मैं ऐप को अपनी सेटिंग्स.py में जोड़ता हूं और मैं एक manage.py makemigrations और manage.py माइग्रेट करता हूं; जब मैं निर्णय लेता हूं कि मैं इस पैकेज का उपयोग नहीं करना चाहता हूं और मैं इसे अपने settings.py से हटा देता हूं, तो कमांड manage.py makemigrations मुझे बताएगा "कोई परिवर्तन नहीं मिला" और इसलिए manage.py माइग्रेट कुछ भी नहीं करेगा, लेकिन मैं इस हटाए गए ऐप ने बनाए गए टेबल को निकालने की आवश्यकता है।Django 1.7 माइग्रेशन

मुझे उम्मीद है कि Django माइग्रेशन इसे संभालने की उम्मीद है ताकि अगर मैं एक ऐप हटा दूं तो यह सभी necesary तालिकाओं को हटाने के लिए माइग्रेशन भी बनाएगा।

+0

आप ऐप के लिए पहले सभी माइग्रेशन क्यों नहीं हटाते हैं और फिर ऐप को हटाते हैं? – JuniorCompressor

+0

मैंने सवाल बदल दिया, मैंने खुद को गलत समझाया, मुझे आशा है कि अब यह और स्पष्ट होगा! – diegopau

+0

क्या आपने कोई समाधान निकाला था? इसके साथ भी परेशानी हो रही है। –

उत्तर

3

सबसे पहले, अपने ऐप के models.py में सभी कक्षाओं को टिप्पणी करें। फिर, एक सामान्य माइग्रेशन बनाएं जैसा कि आप सामान्य रूप से करेंगे, जो सभी ऐप की तालिका हटा देगा, और इसे चलाएगा। अंत में, पूरे कोड और अपने कोड बेस से सभी संदर्भों को हटा दें।

+0

यह एक अच्छा समाधान की तरह प्रतीत होता है, लेकिन जब मेरे प्रोजेक्ट में ऐप को एकीकृत किया जाता है, तो अधिक समझ में आता है, इस मामले में मैं बस अपने वर्चुअलएन्व में एक पैकेज स्थापित कर रहा हूं और इसे अपने प्रोजेक्ट में जोड़कर इसे अपनी सेटिंग्स में जोड़ रहा हूं। मैं Django के लिए नया हूँ तो यह कुछ बेवकूफ हो सकता है मैं अभी तक नहीं मिल रहा है! – diegopau

+1

पूरे ऐप को हटाने के लिए कोई भी "python manage.py माइग्रेट [app_name] शून्य" का उपयोग कर सकता है – potar

1

उचित django माइग्रेशन के लिए nachouve के उत्तर को विस्तारित करते हुए, आप RunSQL सभी DROP statements के साथ माइग्रेशन का उपयोग कर सकते हैं, django माइग्रेशन दस्तावेज़ देखें।

आप या तो इसे ऐप में हटा सकते हैं या (यदि आपने पहले से ही ऐप हटा दिया है या इसे इंस्टॉल किया है तो आप इसे संपादित नहीं कर सकते हैं)।

from django.db import migrations 

DROP_ACCOUNT_TABLES = """\ 
    DROP TABLE IF EXISTS account_account CASCADE; 
    DROP TABLE IF EXISTS account_accountdeletion CASCADE; 
    DROP TABLE IF EXISTS account_emailaddress CASCADE; 
    DROP TABLE IF EXISTS account_emailconfirmation CASCADE; 
    DROP TABLE IF EXISTS account_signupcode CASCADE; 
    DROP TABLE IF EXISTS account_signupcoderesult CASCADE; 
""" 


class Migration(migrations.Migration): 

    dependencies = [ 
     ('auth', '<< previous migations >>'), 
    ] 

    operations = [ 
     migrations.RunSQL(DROP_ACCOUNT_TABLES) 
    ] 
6

आप, यह एक के साथ सावधान रहना होगा सुनिश्चित करें कि आप समझते हैं:

उदाहरण के लिए Django-उपयोगकर्ता के खातों को हटाने (जो गरीब कवरेज है और एक दायित्व है) के बाद साफ करने के लिए आपरेशन उलट जा रहा है जब आप इसे करते हैं, लेकिन कुछ इस तरह काम करना चाहिए:

manage.py migrate <app_name> zero

जाहिर है आप अपनी सेटिंग्स से इसे हटाने के लिए और इस तरह माइग्रेशन खोज योग्य हैं तो इससे पहले कि यह करने के लिए किया है।

संपादित: इस धीरे-धीरे कुछ upvotes प्राप्त हो रहे हैं - मैं लगा रहा appropriate documentation की ओर हर कोई प्रत्यक्ष था विशेष रूप से,: किसी एप्लिकेशन के लिए सभी माइग्रेशन unapply को

नाम शून्य

का प्रयोग करें।

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