मैं एक मौजूदा Django परियोजना में कई मॉडल का नाम बदलने की योजना बना रहा हूं जहां कई अन्य मॉडल हैं जिनके मॉडल का विदेशी प्रमुख संबंध हैं मैं नाम बदलना चाहूंगा। मुझे पूरा यकीन है कि इसके लिए कई पलायन की आवश्यकता होगी, लेकिन मैं सटीक प्रक्रिया के बारे में सुनिश्चित नहीं हूं।
मान लीजिए कि मैं एक Django ऐप के भीतर निम्नलिखित मॉडलों के साथ शुरू करता हूं जिसे कहा जाता है myapp
:
class Foo(models.Model):
name = models.CharField(unique=True, max_length=32)
description = models.TextField(null=True, blank=True)
class AnotherModel(models.Model):
foo = models.ForeignKey(Foo)
is_awesome = models.BooleanField()
class YetAnotherModel(models.Model):
foo = models.ForeignKey(Foo)
is_ridonkulous = models.BooleanField()
मैं Foo
मॉडल का नाम बदलना चाहता हूं क्योंकि नाम वास्तव में कोई मतलब नहीं है और कोड में भ्रम पैदा कर रहा है, और Bar
बहुत स्पष्ट नाम के लिए बना देगा।
मैंने जो कुछ Django विकास प्रलेखन में पढ़ा है, मैं निम्नलिखित प्रवासन रणनीति मान रहा हूं:
चरण 1
संशोधित करें models.py
:
class Bar(models.Model): # <-- changed model name
name = models.CharField(unique=True, max_length=32)
description = models.TextField(null=True, blank=True)
class AnotherModel(models.Model):
foo = models.ForeignKey(Bar) # <-- changed relation, but not field name
is_awesome = models.BooleanField()
class YetAnotherModel(models.Model):
foo = models.ForeignKey(Bar) # <-- changed relation, but not field name
is_ridonkulous = models.BooleanField()
ध्यान दें कि AnotherModel
फ़ील्ड का नाम foo
नहीं बदलता है, लेकिन संबंध Bar
मॉडल के लिए अपडेट किया गया है। मेरा तर्क यह है कि मुझे एक बार में बहुत अधिक परिवर्तन नहीं करना चाहिए और अगर मैंने इस फ़ील्ड का नाम बदल दिया है तो मुझे bar
उस कॉलम में डेटा खोने का जोखिम होगा।
चरण 2
एक खाली माइग्रेशन बनाएँ:
python manage.py makemigrations --empty myapp
चरण 3
संचालन सूची में ऑपरेशन Migration
को जोड़ने के लिए चरण 2 में बनाई गई माइग्रेशन फ़ाइल में कक्षा को संपादित करें RenameModel
:
class Migration(migrations.Migration):
dependencies = [
('myapp', '0001_initial'),
]
operations = [
migrations.RenameModel('Foo', 'Bar')
]
चरण 4
माइग्रेशन लागू करें:
python manage.py migrate
चरण 5
संबंधित फ़ील्ड नामों को इसमें संपादित करें models.py
:
class Bar(models.Model):
name = models.CharField(unique=True, max_length=32)
description = models.TextField(null=True, blank=True)
class AnotherModel(models.Model):
bar = models.ForeignKey(Bar) # <-- changed field name
is_awesome = models.BooleanField()
class YetAnotherModel(models.Model):
bar = models.ForeignKey(Bar) # <-- changed field name
is_ridonkulous = models.BooleanField()
चरण 6
एक और खाली प्रवास बनाएँ:
python manage.py makemigrations --empty myapp
चरण 7
संचालन सूची में किसी भी संबंधित क्षेत्र के नाम के लिए ऑपरेशन (ओं) Migration
को जोड़ने के लिए चरण 6 में बनाई गई माइग्रेशन फ़ाइल में कक्षा को संपादित करें RenameField
:
class Migration(migrations.Migration):
dependencies = [
('myapp', '0002_rename_fields'), # <-- is this okay?
]
operations = [
migrations.RenameField('AnotherModel', 'foo', 'bar'),
migrations.RenameField('YetAnotherModel', 'foo', 'bar')
]
चरण 8
दूसरा माइग्रेशन लागू करें:
python manage.py migrate
नए चर नामों को प्रतिबिंबित करने के लिए बाकी कोड (विचार, रूप, आदि) को अपडेट करने के अलावा, क्या यह मूल रूप से नया माइग्रेशन कार्यक्षमता काम करेगा?
इसके अलावा, यह कई चरणों की तरह लगता है। क्या प्रवास के संचालन को किसी तरह से संघनित किया जा सकता है?
धन्यवाद!