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

السؤال

نشر

أحاول إنشاء عمليات ترحيل migrations داخل تطبيق جانغو Django موجود باستخدام الأمر makemigrations ولكنه يظهر الرسالة

No changes detected

عادةً ما أقوم بإنشاء تطبيقات جديدة في المشروع باستخدام الأمر startapp ولكني لم أستخدمه لهذا التطبيق عندما قمت بإنشائه.

بعد محاولة أكتشاف الأخطاء، اكتشفت أنه لا يتم إنشاء ملفات ترحيل البيانات migrations لأن المجلد migrations غير موجود في أحد التطبيقات.

هل سيكون من الأفضل إنشاء المجلد إذا لم يكن موجودًا أم سوف يسبب خطأ بعد ذلك أو يؤدي لمشكلة في قاعدة البيانات؟

Recommended Posts

  • 1
نشر

لإنشاء عمليات ترحيل أولية لأحد التطبيقات بما في ذلك المجلد migrations، قم بتشغيل الأمر "makemigrations" وحدد اسم التطبيق. سيتم إنشاء مجلد migrations بشكل تلقائي.

./manage.py makemigrations <myapp>

كما يجب تضمين تطبيقك في INSTALLED_APPS أولاً داخل الملف settings.py وإلا سوف يؤدي إلى ظهور خطأ بعدم وجود التطبيق من الأساس.

تحتاج إلى تحديد اسم التطبيق إذا كان التطبيق لا يحتوي على مجلد migrations. وقد يحدث هذا إذا قمت بإنشاء التطبيق يدويًا، أو قمت بالترقية من إصدار قديم من جانغو Django لا يحتوي على أي ملفات تهجير migrations.

إيضًا إذا لم تكن تستخدم الملف models.py وتستخدم مجلد models مخصص للنماذج فيجب أن تقوم بإنشاء الملف init، فعلى سبيل المثال، إن كنت تستخدم الملف my_model.py في المجلد models، فيجب أن تقوم بإنشاء الملف التالي:

my_app/models/__init__.py

أيضًا يجب أن تستدعي في داخله الملف my_model.py، على النحو التالي:

from .my_model import MyModel

 

  • 0
نشر (معدل)

هناك العديد من الأسباب المحتملة لعدم اكتشاف django لما سيتم ترحيله أثناء أمر makemigrations:
يجب أنت تكون حزمة الترحيل في تطبيقك. أيضاً في INSTALLED_APPS، يوصى بتحديد مسار  ال  module app config كاملاً  "application.apps.MyAppConfig" أيضاً يجب أن تتأكد من أنك قمت بتعيين ملف ال settings الصحيح manage.py makemigrations --settings mysite.settings ، ويفضل أن تقوم أيضاً بوضع اسم التطبيق بشكل صريح  في manager.py makemigrations myapp - فهذا يساعدك على عزل المشكلة. أيضاً تأكد من أن لديك ال app_label الصحيح في model meta. أيضاً يمكنك تنفيذ الأمر makemigrations -v 3 الذي قد يساعدك في تحديد المشكلة.  أيضاً يجب أن تتأكد من أن اسم التطبيق الخاص بك موجود في settings.py ا INSTALLED_APPS وإلا فلن يتم تشغيل عمليات الترحيل بغض النظر عن ما تفعله:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'blog',
]

ثم قم بتنفيذ:

./manage.py makemigrations blog

 

تم التعديل في بواسطة Ali Haidar Ahmad
  • 0
نشر

بالاضافة للحلول السابقة، قد تكون المشكلة في Meta subclass of models..

قد يكون لديك تعريف كالتالي سواء في  apps.py  أو models.py أو views.py :

label = <app name>

اذا كان هناك أي إحتمال بحيث أن  meta class  لا يحمل نفس العنوان label الخاص بالتطبيق خاصتك app ، قد لا يتم رصد أي تغيرات تحدث، ببساطة لانه لا يجد توافق بين ما تقوم بتغييره وما هو معرف عنده.

لذا قد تحتاج الى تعديلها كالتالي:

class ModelClassName(models.Model):

    class Meta:
        app_label = '<app name>' # <-- هذا ما يجب ضبطه باسم تطبيقك.

    field_name = models.FloatField()
    ...

 

  • 0
نشر

تستطيع تعيين فئة Meta افتراضيا إلى "managed = false". على سبيل المثال:

class Rssemailsubscription(models.Model):
    id = models.CharField(primary_key=True, max_length=36)
    ...
    area = models.FloatField('Area (Sq. KM)', null=True)

    class Meta:
        managed = False
        db_table = 'RSSEmailSubscription'

من خلال التغيير managed إلى True، سوف تبدأ ملفات التهجير في التقاط التغييرات.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...