আমি বিদ্যমান জ্যাঙ্গো প্রকল্পে বেশ কয়েকটি মডেলের নাম পরিবর্তন করার পরিকল্পনা করছি যেখানে এমন আরও অনেক মডেল রয়েছে যেখানে আমি নাম পরিবর্তন করতে চাই এমন মডেলগুলির সাথে বিদেশী কী সম্পর্ক রয়েছে। আমি মোটামুটি নিশ্চিত যে এর জন্য একাধিক স্থানান্তর প্রয়োজন হবে, তবে আমি সঠিক পদ্ধতি সম্পর্কে নিশ্চিত নই।
ধরা যাক আমি জ্যাঙ্গো অ্যাপ নামে পরিচিত একটি মডেলের সাথে নিম্নলিখিত মডেলগুলি দিয়ে শুরু করি 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
আরও পরিষ্কার নাম তৈরি করবে।
জাজানো বিকাশের নথিতে আমি যা পড়েছি তা থেকে, আমি নিম্নলিখিত স্থানান্তর কৌশলটি ধরে নিচ্ছি:
ধাপ 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
column কলামের ডেটা হারাতে পারি risk
ধাপ ২
একটি খালি স্থানান্তর তৈরি করুন:
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
যুক্ত করতে step ধাপে তৈরি মাইগ্রেশন ফাইলটিতে শ্রেণি সম্পাদনা করুন 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
নতুন পরিবর্তনশীল নামগুলি প্রতিবিম্বিত করতে বাকি কোডটি (ভিউ, ফর্ম ইত্যাদি) আপডেট করার পাশাপাশি নতুন মাইগ্রেশন কার্যকারিতা কীভাবে এটি কাজ করবে?
এছাড়াও, এটি অনেক ধাপের মত মনে হচ্ছে। মাইগ্রেশন অপারেশনগুলি কি কোনও উপায়ে কনডেন্স করা যায়?
ধন্যবাদ!