اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

يمكنك أن تستخدم التابع db.rename_column لتغير اسم حقل معين، وذلك من خلال عمل ملف تهجير migration من خلال الأمر التالي:

./manage.py schemamigration myapp renaming_column_name --auto

سيقوم الأمر السابق بتوليد ملف باسم myapp/migrations/000x_renaming_column_name.py، الآن يمكنك أن تستخدم التابع db.rename_column في هذا الملف على النحو التالي:

class Migration:
    def forwards(self, orm):
        # تغير الحقل name إلى full_name
        db.rename_column('app_foo', 'name', 'full_name')

    def backwards(self, orm):
        # تغير الحقل full_name إلى name
        db.rename_column('app_foo', 'full_name', 'name')

أول معامل في التابع db.rename_column هو اسم الجدول الذي يتحوي على الحقل الذي تريد تغيره. في حالة وجود اسم نموذج متعدد الكلمات و بحالة camel-cased، مثل FooBar ، فسيكون اسم الجدول app_foobar (حروف صغيرة وتفصل بين الكلمات بعلامة _ ،وهو ما يسمى snake-case).

  • 0
نشر (معدل)

في النسخ الحديث من  django،يمكنك فعل هذا ببساطة باعادة تسمية الحقل دون احداث اي تغيير في قاعدة البيانات كالتالي:

operations = [
    migrations.AlterField(
        model_name='mymodel',
        name='name',
        field=models.BooleanField(default=False, db_column=b'name'),
    ),
    migrations.RenameField(
        model_name='mymodel',
        old_name='name',
        new_name='full_name',
    ),

حل أخر ببساطة عن طريق تسمية الحقل:

class Foo(models.Model):
    name = models.CharField()

الى اسم جديد:

class Foo(models.Model):
    full_name = models.CharField()

ثم قم بتشغيل الكود التالي:

python manage.py makemigrations

هذا سوف يقوم بحذف القديم وعمل حقل جديد. 

الان اذهب وقم بتعديل التالي:

operations = [
    migrations.RenameField(
        model_name='foo',
        old_name='name',
        new_name='full_name')
]

ثم قم بتشغيل الكود التالي لنقل البيانات للحقل الجديد دون فقدان اي بيانات:

python manage.py migrate

 

تم التعديل في بواسطة Ahmed Sharshar

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...