জ্যাঙ্গো - মেকমিগ্রেশন - কোনও পরিবর্তন সনাক্ত করা যায়নি


138

আমি মেকমিগ্রেশন কমান্ডটি ব্যবহার করে একটি বিদ্যমান অ্যাপের মধ্যে মাইগ্রেশন তৈরি করার চেষ্টা করছিলাম তবে এটি "কোনও পরিবর্তন সনাক্ত করা যায় নি"।

সাধারণত আমি startappকমান্ডটি ব্যবহার করে নতুন অ্যাপ্লিকেশন তৈরি করি তবে আমি যখন এটি তৈরি করেছি তখন এই অ্যাপ্লিকেশনটির জন্য ব্যবহার করি না।

ডিবাগিংয়ের পরে, আমি দেখতে পেলাম যে এটি মাইগ্রেশন তৈরি করছে না কারণ migrationsএকটি অ্যাপ্লিকেশন থেকে প্যাকেজ / ফোল্ডারটি অনুপস্থিত।

এটি যদি ফোল্ডারটি না থাকে তবে এটি তৈরি না করা ভাল হয় বা আমি কিছু হারিয়ে যাচ্ছি?


13
আপনি কি আপনার অ্যাপ্লিকেশনটি INSTALLED_APPS এ যুক্ত করেছেন?
ওলেন্দ্রনহ

6
হ্যাঁ এটি প্রথমবারের মতো ইনস্টলড অ্যাপ্লিকেশনটিতে রয়েছে, makemigrations <myapp>আলাসডায়ারের নির্দেশিত হিসাবে এটি ব্যবহার করা আরও ভাল।
দিলরাজ

1
'অ্যাবস্ট্রাক্ট = ট্রু' অপসারণ করুন :)
গ্রাভটাইয়াগি

'মেকমিজারেশন' কাজ করেনি। 'Makemigration <myapp>' কাজ করেছে
অসীম

উত্তর:


266

কোনও অ্যাপ্লিকেশনের জন্য প্রাথমিক মাইগ্রেশন তৈরি করতে, makemigrationsঅ্যাপ্লিকেশনটির নাম চালান এবং নির্দিষ্ট করুন। মাইগ্রেশন ফোল্ডার তৈরি করা হবে।

./manage.py makemigrations <myapp>

আপনার অ্যাপ্লিকেশনটি অবশ্যই INSTALLED_APPSপ্রথমে অন্তর্ভুক্ত করতে হবে (সেটিংস.পি এর ভিতরে)।


15
কোনও ধারণা কেন তারা << সময়> অ্যাপ্লিকেশনটি নির্দিষ্ট করতে বাধ্য করে?
maazza

40
@ মায়জা আপনার যদি অ্যাপ্লিকেশনটির migrationsফোল্ডার না থাকে তবে আপনাকে অ্যাপের নামটি নির্দিষ্ট করতে হবে । এটি আপনি যদি ম্যানুয়ালি অ্যাপ্লিকেশন তৈরি করে থাকেন বা আপনি জ্যাঙ্গোর কোনও পুরানো সংস্করণ থেকে আপগ্রেড করেছেন যা মাইগ্রেশন হয়নি।
আলাসদায়ের

13
@ মায়জা আসলে আপনার অ্যাপটিতে __init__.py'মাইগ্রেশন' নামে একটি পাইথন প্যাকেজ দরকার ।
জীবন

3
এমন কিছুর মতো শোনায় যা জ্যাঙ্গোর স্বয়ংক্রিয়ভাবে হ্যান্ডেল করা উচিত।
দ্বৈত_

1
@ দ্বৈত_ এটি ডিজাইনের মাধ্যমে - জ্যাঙ্গো ধরে নেয় না যে আপনি আপনার অ্যাপ্লিকেশনটির জন্য মাইগ্রেশন চান। যদি এটি সমস্ত অ্যাপ্লিকেশনের জন্য মাইগ্রেশন তৈরি করে, আপনি চালানোর সময় এটির ত্রুটি হতে পারে migrate
আলাসডায়ার

49

আমার সমস্যা (এবং তাই সমাধান) উপরে বর্ণিতগুলির থেকে এখনও আলাদা ছিল।

আমি models.pyফাইলটি ব্যবহার করছিলাম না , তবে একটি modelsডিরেক্টরি তৈরি করে my_model.pyসেখানে ফাইল তৈরি করেছি, যেখানে আমি আমার মডেলটি রেখেছি। জ্যাঙ্গো আমার মডেলটি সন্ধান করতে পারেনি তাই এটি লিখেছিল যে প্রয়োগ করার মতো কোনও স্থানান্তর নেই।

আমার সমাধানটি ছিল: my_app/models/__init__.pyফাইলটিতে আমি এই লাইনটি যুক্ত করেছি: from .my_model import MyModel


এটি আমার জন্যও সমাধান হতে পেরে আনন্দিত, তবে কেন এটি তা আমি বুঝতে পারি না। কারও কি কারও মধ্যে অন্তর্দৃষ্টি রয়েছে যা এর কারণ হতে পারে?
পল 'টি হাউট

জ্যাঙ্গোতে আপনার মডেলগুলি কোথায় সন্ধান করতে হবে তার ডিফল্ট পাথ রয়েছে। যদি প্রকল্পের কাঠামোটি আলাদা হয় এবং মডেলগুলি সাধারণ জায়গায় না থাকে তবে তাদের সেখানে আমদানি করা দরকার।
করিনা ক্লিন্কেভিয়েস্টি

@ করিনাক্লিনকিভিওআইটিū যদি আমার এই জাতীয় মডেলগুলি সরিয়ে ফেলার দরকার হয়?
দানিল মাশকিন

@ ড্যানিলম্যাশকিন আমার ধারণা আপনি আমদানিও সরিয়ে ফেলতে হবে। এটি আপনার প্রকল্পের কাঠামোগত করার একটি উপায় (একমাত্র নয়) এবং আপনি যদি এটি বেছে
নেন

1
আমি মডেলগুলির জন্য "ক্লাসিক" আর্কিটেকচার ব্যবহার করেছি, তারপরে আমি "মডেল ফোল্ডার" আর্কিটেকচারে স্থানান্তরিত করেছি এবং আমার বিদ্যমান মডেলগুলিতে কোনও স্থানান্তর এখনও সনাক্ত করা হয়েছে। তবে, এখন নতুন মডেল তৈরি করার সময় আমার এই সমস্যাটি রয়েছে। আপনার সমাধানটি ভালভাবে কাজ করে, তবে এটি আমার কোডবেস জাতীয় ধরণের বেমানান হতে দেয় কারণ কখনও কখনও আমদানি হয়, কখনও কখনও হয় না। এর থেকে আরও ভাল সমাধান হতে পারে। আমার ধারণা, নতুন মডেলগুলির সন্ধানের জন্য জাঙ্গোর ফোল্ডারগুলির তালিকা সহ একটি সেটিংস প্রস্তাব করা উচিত।
ডেভিড ডি

43

makemigrationsকমান্ড চলাকালীন কী স্থানান্তরিত করতে হবে তা ডিঙ্গো সনাক্ত না করার জন্য একাধিক সম্ভাব্য কারণ রয়েছে ।

  1. মাইগ্রেশন ফোল্ডার আপনার অ্যাপে একটি মাইগ্রেশন প্যাকেজ দরকার।
  2. INSTALLED_APPS আপনি নির্ধারণ করা আপনার অ্যাপ্লিকেশান প্রয়োজন INSTALLED_APPS.dict
  3. makemigrations -v 3ভার্বোসিটি ভার্বোসিটির জন্য দৌড় দিয়ে শুরু হয় । এটি সমস্যার কিছুটা আলোকপাত করতে পারে।
  4. সম্পূর্ণ পথ সালে INSTALLED_APPSএটি 'apply.apps.MyAppConfig' পূর্ণ মডিউল অ্যাপ্লিকেশন কনফিগ পাথ নির্দিষ্ট বাঞ্ছনীয়
  5. - সেটিংস আপনি সঠিক সেটিংস ফাইল সেট করা আছে তা নিশ্চিত করতে চাইতে পারেন:manage.py makemigrations --settings mysite.settings
  6. অ্যাপ্লিকেশনটির নামটি স্পষ্টভাবে অ্যাপ্লিকেশনটির নামটি নির্দিষ্ট করুনmanage.py makemigrations myapp - যা একা অ্যাপ্লিকেশনটির স্থানান্তরকে হ্রাস করে এবং আপনাকে সমস্যাটি বিচ্ছিন্ন করতে সহায়তা করে।
  7. মডেল মেটা চেক করুন app_labelআপনার মডেল মেটাতে আপনার অধিকার রয়েছে

  8. ডিবাগ জ্যাঙ্গো ডিবাগ জাজানো কোর স্ক্রিপ্ট। Makemigration কমান্ড বেশ সোজা এগিয়ে। পাইচারমে এটি কীভাবে করা যায় তা এখানে । সেই অনুযায়ী আপনার স্ক্রিপ্ট সংজ্ঞা পরিবর্তন করুন (উদা makemigrations --traceback myapp:)

একাধিক ডাটাবেস:

  • ডিবি রাউটার জাজানো ডিবি রাউটারের সাথে কাজ করার সময়, রাউটার ক্লাসটি (আপনার কাস্টম রাউটার ক্লাস) allow_syncdbপদ্ধতিটি প্রয়োগ করতে হবে ।

মেকিমেগ্রেশনগুলি সর্বদা মডেল পরিবর্তনের জন্য মাইগ্রেশন তৈরি করে, তবে যদি অনুমতি_মিজ্রেট () মিথ্যা ফিরিয়ে দেয়,


1
সমস্যা সম্পর্কিত অনেক পরিস্থিতিতে আচ্ছাদিত, গ্রহণযোগ্য উত্তর হওয়া উচিত।
কৃষ

আরেকটি সম্ভাবনা: ভুল নামটি আমদানি করা হচ্ছে, অর্থাত্ ক্ষেত্রের পরিবর্তে ফর্মগুলি থেকে একটি ক্ষেত্র আমদানি করা, বা মডেলের পরিবর্তে ফর্মগুলি থেকে একটি মডেল আমদানি করা হচ্ছে। একটি উদাহরণ: from recurrence.forms import RecurrenceFieldতবে এটি হওয়া উচিত ছিল from recurrence.fields import RecurrenceField
hlongmore

আরও একটি কারণ। নিশ্চিত হয়ে নিন যে ওয়েবসাইটটির জন্য কোনও রুটের মধ্যে মডেলটি ব্যবহৃত হয়েছে (অ্যাডমিনের মাধ্যমে বা অন্যথায়)। " makemigrationsস্ক্রিপ্টটি এমন মডেলগুলির সন্ধান করে যা থেকে সংযুক্ত থাকে urls.py"। এখানে স্ট্যাকওভারফ্লো.com
কাইল

python manage.py makemigrations -v 3 <app_name>
সেমিডিড

যখন আমি কোনও টেবিল যুক্ত করব এবং তারপরে একই সাথে এই নতুন টেবিলটিতে একটি বিদেশী কী উল্লেখটি যুক্ত করব। এটি 2 টি ধাপে বিভক্ত করতে হবে: প্রাক পদক্ষেপ: সেটিংসে INSTALLED_APPS যুক্ত করুন। 1) নতুন টেবিল তৈরি করুন: পাইথন ম্যানেজ.পি মেকমিজারেশন <app_name>; পাইথন manage.py makemigrations: 2) যোগ পররাষ্ট্র কী
চার্লি木匠

26

আমি এই প্রশ্নের অনেক উত্তর পড়েছি প্রায়শই makemigrationsঅন্য কিছু উপায়ে চালানোর কথা বলে । তবে আমার কাছে সমস্যাটি ছিল Metaমডেলগুলির সাবক্লাসে।

আমার কাছে একটি অ্যাপ্লিকেশন কনফিগার রয়েছে যা বলছে label = <app name>( apps.pyফাইলটিতে, পাশে models.py, views.pyইত্যাদি)। যদি কোনও সুযোগে আপনার মেটা বর্গের অ্যাপ্লিকেশন লেবেলের মতো একই লেবেল না থাকে (উদাহরণস্বরূপ কারণ আপনি একটি খুব বড় অ্যাপ্লিকেশনটিকে একাধিক বিভাগে বিভক্ত করছেন), কোনও পরিবর্তন সনাক্ত করা হয়নি (এবং কোনও সহায়ক ত্রুটি বার্তা নেই)। সুতরাং আমার মডেল ক্লাসে আমার এখন রয়েছে:

class ModelClassName(models.Model):

    class Meta:
        app_label = '<app name>' # <-- this label was wrong before.

    field_name = models.FloatField()
    ...

এখানে জ্যাঙ্গো 1.10 চালানো।


13

এটি একটি মন্তব্য তবে সম্ভবত একটি উত্তর হওয়া উচিত।

আপনার অ্যাপ্লিকেশনটির নাম সেটিংসে রয়েছে কিনা তা নিশ্চিত করুন INSTALLED_APPSpy পিসি নাহলে আপনি যা করেন তা মাইগ্রেশন চালাবেনা।

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

কিন্তু এটা 'appname_modelname', যখন আমরা চালানো 'manage.py স্থানান্তরণের' কম্যান্ড যেমন সারণী নাম তৈরি করে
Daniyal Javaid

সারণীর নাম পরিবর্তন করতে মডেল মেটা বিকল্পগুলি দেখুন
স্টিফেন

11

এখানে বর্ণিত না হয়ে আমার আরও একটি সমস্যা ছিল, যা আমাকে বাদাম চালিয়েছিল।

class MyModel(models.Model):
    name = models.CharField(max_length=64, null=True)  # works
    language_code = models.CharField(max_length=2, default='en')  # works
    is_dumb = models.BooleanField(default=False),  # doesn't work

আমার অনুলিপি ',' এক লাইনে ছিল সম্ভবত অনুলিপি এবং পেস্ট থেকে। Is_dumb এর সাথে থাকা লাইনটি './manage.py Makemigration' দিয়ে একটি মডেল মাইগ্রেশন তৈরি করে না তবে ত্রুটিও ছুঁড়ে না দেয়। ',' অপসারণের পরে এটি প্রত্যাশার মতো কাজ করেছিল।

আপনি অনুলিপি এবং পেস্ট করার সময় তাই সতর্ক হন :-)


ট্রেলিং কমাটি অন্য কোথাও ত্রুটিযুক্ত কারণ হতে পারে; কমা বিবৃতিটিকে একটি দুর্বল করে তোলে, তাই is_dumbসমান (models.BooleanField(default=False), )যা makemigrationsকোনও ডাটাবেস কলামে রূপান্তর করতে জানে না।
hlongmore

8

কখনও কখনও এর ./manage.py makemigrationsচেয়ে বেশি হয় যখন ./manage.py makemigrations <myapp>এটি অ্যাপসের মধ্যে কিছু নির্দিষ্ট দ্বন্দ্ব পরিচালনা করতে পারে।

এই অনুষ্ঠানগুলি নিঃশব্দে ঘটে এবং swearingভয়ঙ্কর No changes detectedবার্তার আসল অর্থ বুঝতে কয়েক ঘন্টা সময় লাগে ।

সুতরাং, নিম্নলিখিত কমান্ডটি ব্যবহার করা আরও অনেক ভাল পছন্দ:

./manage.py makemigrations <myapp1> <myapp2> ... <myappN>


7

আমি জ্যাঙ্গোর বাইরে থেকে একটি টেবিল অনুলিপি করেছিলাম এবং মেটা ক্লাসটি "পরিচালিত = মিথ্যা" এ ডিফল্ট হয়েছিল। উদাহরণ স্বরূপ:

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'

সঠিকভাবে ম্যানেজড পরিবর্তন করে, মেকমিগ্রেশনগুলি পরিবর্তনগুলি বেছে নেওয়া শুরু করে।


4
  1. আপনার অ্যাপটি সেটিংস.পিতে ইনস্টলড_প্পসে উল্লেখ রয়েছে তা নিশ্চিত করুন
  2. আপনার ক্লাস মডেল প্রসারিত তা নিশ্চিত করুন od মডেল

2

আমি এটি করে এই সমস্যাটি সমাধান করেছি:

  1. "Db.sqlite3" ফাইলটি মুছুন। এখানে সমস্যাটি হ'ল আপনার বর্তমান ডেটা বেসটি মুছে ফেলা হবে, সুতরাং আপনাকে এটি আবার তৈরি করতে হবে।
  2. আপনার সম্পাদিত অ্যাপ্লিকেশনটির স্থানান্তর ফোল্ডারের অভ্যন্তরে, সর্বশেষ আপডেট হওয়া ফাইলটি মুছুন। মনে রাখবেন যে প্রথম তৈরি ফাইলটি হ'ল: "0001_initial.py"। উদাহরণস্বরূপ: আমি একটি নতুন ক্লাস তৈরি করেছি এবং এটি "মেকমিগ্রেশন" এবং "মাইগ্রেট" পদ্ধতি দ্বারা নিবন্ধিত করেছি, এখন "0002_auto_etc.py" নামে একটি নতুন ফাইল তৈরি হয়েছিল; এটা মোছ.
  3. " পাইচছে " ফোল্ডারে যান (মাইগ্রেশন ফোল্ডারের অভ্যন্তরে) এবং "0002_auto_etc.pyc" ফাইলটি মুছুন।
  4. অবশেষে, কনসোলে যান এবং "পাইথন ম্যানেজ.পি মেকমিগ্রেশন" এবং "পাইথন ম্যানেজ.পি মাইগ্রেশন" ব্যবহার করুন।

2

আমি সঠিক যুক্তি দিতে ভুলে গেছি:

class LineInOffice(models.Model):   # here
    addressOfOffice = models.CharField("Корхоная жош",max_length= 200)   #and here
    ...

মডেল.পি তে এবং তারপরে এটি বিরক্তিকর বাদ পড়তে শুরু করে

অ্যাপ্লিকেশন 'মাই অ্যাপ' এ কোনও পরিবর্তন সনাক্ত করা যায়নি


2

আর একটি সম্ভাব্য কারণ হ'ল যদি আপনার কাছে অন্য কোনও ফাইলে (কোনও প্যাকেজে নয়) কিছু মডেল সংজ্ঞায়িত হয়ে থাকে এবং সেটিকে অন্য কোথাও উল্লেখ না করে।

আমার জন্য, কেবলমাত্র যুক্ত from .graph_model import *করা admin.py( graph_model.pyনতুন ফাইলটি কোথায় ছিল) সমস্যার সমাধান করেছে।


2

উপরের উত্তরগুলির চেয়ে আমার সমস্যাটি অনেক সহজ ছিল এবং আপনার প্রকল্পটি ইতিমধ্যে সেট আপ করা এবং কাজ করা অবধি সম্ভবত আরও সাধারণ কারণ। আমার একটি অ্যাপ্লিকেশনটিতে যা দীর্ঘদিন ধরে কাজ করে যাচ্ছিল, মাইগ্রেশনগুলি খুব খারাপ মনে হয়েছিল, তাই তাড়াহুড়ো করে আমি নিম্নলিখিতগুলি করেছি:

rm -r */migrations/*
rm db.sqlite3
python3 manage.py makemigrations
No changes detected

Whaat ??

আমি ভুল করে সমস্ত __init__.pyফাইলও মুছে ফেলেছিলাম :( - আমার ভিতরে যাওয়ার পরে সবকিছু আবার কাজ করছে এবং:

touch ads1/migrations/__init__.py

আমার প্রতিটি অ্যাপ্লিকেশন এর জন্য makemigrationsআবার কাজ।

দেখা যাচ্ছে যে আমি ম্যানুয়ালি অন্য একটি অনুলিপি করে একটি নতুন অ্যাপ্লিকেশন তৈরি করেছি __init__.pyএবং migrationsফোল্ডারে রেখে দিতে ভুলে গিয়েছিলাম এবং এটি আমাকে দৃin়প্রত্যয় দিয়েছিল যে সবকিছু খারাপ ছিল - rm -rউপরে বর্ণিত হিসাবে এটি আরও খারাপ করে তোলে ।

আশা করি এটি কয়েক ঘন্টার জন্য "কোনও পরিবর্তন সনাক্ত করা হয়নি" ত্রুটিতে শপথ করতে কাউকে সহায়তা করবে।


1

সমাধানটি আপনাকে আপনার অ্যাপ্লিকেশনটি INSTALLED_APPS এ অন্তর্ভুক্ত করতে হবে।

আমি এটি মিস করেছি এবং আমি এই একই সমস্যাটি পেয়েছি।

আমার অ্যাপ্লিকেশন নাম উল্লেখ করার পরে মাইগ্রেশন সফল হয়েছিল

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

দয়া করে নোট করুন আমি বোর্ডগুলি সর্বশেষে উল্লেখ করেছি, এটি আমার অ্যাপ্লিকেশন নাম।


1

ইনস্টলড_এপিপিএস = [

'blog.apps.BlogConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

]

নিশ্চিত করুন যে 'ব্লগ.এপস.ব্লগকনফিগ', (এটি আপনার অ্যাপ্লিকেশন স্থানান্তর করতে আপনার সেটিংসে অন্তর্ভুক্ত করা হয়েছে py

তারপরে পাইথন 3 ম্যানেজ.পি মেকমিগ্রেশন ব্লগ বা আপনার অ্যাপের নাম চালান


1

আপনার কাছে থাকা খুব বোবা ইস্যুটি হ'ল class Metaআপনার মডেলের দুটি সংজ্ঞা দেওয়া । সেক্ষেত্রে, চলমান অবস্থায় প্রথম পরিবর্তনটি প্রয়োগ করা হবে না makemigrations

class Product(models.Model):
    somefield = models.CharField(max_length=255)
    someotherfield = models.CharField(max_length=255)

    class Meta:
        indexes = [models.Index(fields=["somefield"], name="somefield_idx")]

    def somefunc(self):
        pass

    # Many lines...

    class Meta:
        indexes = [models.Index(fields=["someotherfield"], name="someotherfield_idx")]

1

আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমি সারা দিন এই একই সমস্যা নিয়ে লড়াই করেছি এবং আমার সমাধানটি ছিল একটি সহজ প্রশ্ন।

আমি আমার ডিরেক্টরি কাঠামো কিছু লাইন বরাবর ছিল ...

apps/
   app/
      __init__.py
      app_sub1/
           __init__.py
           models.py
      app_sub2/
           __init__.py
           models.py
      app_sub3/
           __init__.py
           models.py
   app2/
      __init__.py
      app2_sub1/
           __init__.py
           models.py
      app2_sub2/
           __init__.py
           models.py
      app2_sub3/
           __init__.py
           models.py
    main_app/
      __init__.py
      models.py

এবং যেহেতু আমার যে সমস্যা ছিল সে পর্যন্ত অন্য সমস্ত মডেলগুলি অন্য কোথাও আমদানি করা হচ্ছিল main_appযা আমদানি শেষ হয়েছিল যা থেকে নিবন্ধিত হয়েছিল INSTALLED_APPS, তাই আমি ভাগ্যবান হয়েছি যে তারা সবাই কাজ করেছিল।

কিন্তু যেহেতু আমি প্রতিটি যোগ appকরার INSTALLED_APPSএবং app_sub*যখন পরিশেষে আমি একটি নতুন মডেল যে ফাইলটি অন্য কোথাও আমদানি করা হয়নি যোগ জ্যাঙ্গো সম্পূর্ণই এটা উপেক্ষা করেছেন।

আমার ফিক্স models.pyপ্রতিটি এর appমতো বেস ডিরেক্টরিতে একটি ফাইল যুক্ত করছিল ...

apps/
   app/
      __init__.py
      models.py <<<<<<<<<<--------------------------
      app_sub1/
           __init__.py
           models.py
      app_sub2/
           __init__.py
           models.py
      app_sub3/
           __init__.py
           models.py
   app2/
      __init__.py
      models.py <<<<<<<<<<--------------------------
      app2_sub1/
           __init__.py
           models.py
      app2_sub2/
           __init__.py
           models.py
      app2_sub3/
           __init__.py
           models.py
    main_app/
      __init__.py
      models.py

এবং তারপরে from apps.app.app_sub1 import *প্রতিটি appস্তরের models.pyফাইলগুলিতে আরও কিছু যোগ করুন।

ব্লেহ ... এটি খুঁজে পেতে আমার এত দীর্ঘ সময় লেগেছে এবং আমি কোথাও সমাধানটি খুঁজে পাইনি ... এমনকি আমি গুগলের ফলাফলের পৃষ্ঠা 2 এ গিয়েছিলাম।

আশা করি এটি কাউকে সাহায্য করবে!


1

সরকারী ডকুমেন্টেশনের মাইগ্রেশন বিভাগ অনুযায়ী আমার জ্যাঙ্গো with.০ এর সাথে একই রকম সমস্যা ছিল , এটি চালানো আমার টেবিলের কাঠামোটি আপডেট করার জন্য যথেষ্ট ছিল:

python manage.py makemigrations
python manage.py migrate

তবে আউটপুট সবসময় একই ছিল: আমি 'মেকমিগ্রেশন' স্ক্রিপ্ট চালানোর পরে আমার মডেলগুলি সম্পর্কে 'কোনও পরিবর্তন সনাক্ত করা যায় না'। আমি মডেল.পি তে একটি মডেল সিন্টেক্স ত্রুটি করেছি আমি ডিবিতে আপডেট করতে চাইছি এমন মডেলটিতে:

field_model : models.CharField(max_length=255, ...)

পরিবর্তে:

field_model = models.CharField(max_length=255, ...)

এই নির্বোধের ভুলটি সমাধান করা, সেই আদেশের সাহায্যে কোনও সমস্যা ছাড়াই মাইগ্রেশন করা হয়েছিল। হতে পারে এটি কাউকে সহায়তা করে।



0

আমার ক্ষেত্রে আমি শ্রেণি যুক্তি সন্নিবেশ করতে ভুলে গেছি

ভুল:

class AccountInformation():

ঠিক

class AccountInformation(models.Model):

0

আমার ক্ষেত্রে, আমি প্রথম মডেলটিতে একটি ক্ষেত্র যুক্ত করেছি এবং জ্যাঙ্গো বলেছিল যে কোনও পরিবর্তন নেই।

মডেলের "টেবিলের নাম" পরিবর্তন করার সিদ্ধান্ত নিয়েছে, মেকমিগ্রেশনগুলি কাজ করেছে। আমি টেবিলের নামটি ডিফল্টে পরিবর্তিত করেছি এবং নতুন ক্ষেত্রটিও সেখানে ছিল।

জ্যাঙ্গো মাইগ্রেশন সিস্টেমে একটি "বাগ" রয়েছে, কখনও কখনও এটি নতুন ক্ষেত্রটি দেখতে পায় না। তারিখের ক্ষেত্রের সাথে সম্পর্কিত হতে পারে।


0

সম্ভাব্য কারণটি হ'ল বিদ্যমান ডিবি ফাইল মুছে ফেলা হতে পারে এবং মাইগ্রেশন ফোল্ডারটি পাইথন ব্যবহার করতে পারেন manage.py makemigrations <app_name>এটি কাজ করা উচিত। আমি একবার একই সমস্যার মুখোমুখি হয়েছিলাম।


0

আরও একটি প্রান্তের কেস এবং সমাধান:

আমি একটি বুলিয়ান ক্ষেত্র যুক্ত করেছি, এবং একই সাথে একই নাম (দোহ) সহ একটি @ প্রপার্টি এটি উল্লেখ করে added সম্পত্তি মন্তব্য করেছে এবং মাইগ্রেশন নতুন ক্ষেত্রটি দেখে এবং যুক্ত করে। সম্পত্তি নামকরণ এবং সব ভাল।


0

আপনার যদি managed = Trueইউটি মডেল মেটা থাকে তবে আপনার এটি সরিয়ে মাইগ্রেশন করতে হবে do তারপরে আবার মাইগ্রেশন চালান, এটি নতুন আপডেটগুলি সনাক্ত করবে।


0

জ্যাঙ্গো এপি অ্যাপ্লিকেশনটিতে নতুন মডেল যুক্ত করার সময় এবং python manage.py makemigrationsসরঞ্জামটি চালানোর সময় কোনও নতুন মডেল সনাক্ত করতে পারেনি।

আশ্চর্যের বিষয়টি হ'ল পুরানো মডেলগুলি makemigrationsসেগুলি গ্রহণ করেছিল তবে এটি কারণ এটি urlpatternsচেইনে উল্লেখ করা হয়েছিল এবং সরঞ্জামটি কোনওভাবে তাদের সনাক্ত করেছে। সুতরাং সেই আচরণের দিকে নজর রাখুন।

সমস্যাটি ছিল কারণ মডেল প্যাকেজের সাথে সম্পর্কিত ডিরেক্টরি কাঠামোর সাবপ্যাকেজ রয়েছে এবং সমস্ত __init__.pyফাইল খালি ছিল were তাদের অবশ্যই প্রতিটি সাবফোল্ডার এবং __init__.py জ্যাঙ্গোর জন্য মডেলগুলিতেmakemigrations সরঞ্জামের সাথে বাছাই করার জন্য সমস্ত প্রয়োজনীয় ক্লাস স্পষ্টভাবে আমদানি করতে হবে ।

models
  ├── __init__.py          <--- empty
  ├── patient
     ├── __init__.py      <--- empty
     ├── breed.py
     └── ...
  ├── timeline
     ├── __init__.py      <-- empty
     ├── event.py
     └── ...

0

অ্যাডমিন.পিতে আপনার মডেলটি নিবন্ধ করার চেষ্টা করুন, এখানে একটি উদাহরণ রয়েছে: - admin.site.register (আপনারমোডেল এখানে)

আপনি নিম্নলিখিত জিনিসগুলি করতে পারেন: - ১. প্রশাসক.সাইট.রেজিস্টার (আপনারমডেলহিরি) # অ্যাডমিন.পিতে ২. পৃষ্ঠাটি পুনরায় লোড করুন এবং আবার চেষ্টা করুন 3. সিটিআরএল-এস টিপুন এবং সংরক্ষণ করুন 4. কোনও ত্রুটি হতে পারে, বিশেষত মডেলগুলি পরীক্ষা করুন .py এবং অ্যাডমিন.পি 5. অথবা, এটির শেষে সমস্তই সার্ভারটি পুনরায় আরম্ভ করুন


0

এটি আশাকরি অন্য কাউকে সাহায্য করবে, কারণ আমি এটির পিছনে পিছনে চেষ্টা করার সময় ব্যয় করে শেষ করেছি।

যদি আপনি একটি ফাংশন আছে মধ্যে একই নামের আপনার মডেল, এই মান মুছে ফেলা হবে। অন্ধকারে দৃশ্যমান সুন্দর, তবে তবুও non

সুতরাং, আপনার যদি এরকম কিছু থাকে:

class Foobar(models.Model):
    [...]
    something = models.BooleanField(default=False)

    [...]
    def something(self):
        return [some logic]

সেক্ষেত্রে ফাংশনটি উপরের সেটিংটিকে ওভাররাইড করবে, এটি "অদৃশ্য" করে তোলে makemigrations


0

আপনি যে সেরা কাজটি করতে পারেন তা হ'ল বিদ্যমান ডাটাবেসটি মুছুন। আমার ক্ষেত্রে, আমি পিএইচপিএমইএইডমিন এসকিউএল ডাটাবেস ব্যবহার করছিলাম, তাই আমি নিজে তৈরি করা ডাটাবেসকে ওভারথিয়ারে মুছে ফেলছি।

মোছার পরে: আমি পিএইচপিএমআইএডমিনে ডাটাবেস তৈরি করি এবং কোনও টেবিল যোগ করি না।

আবার নিম্নলিখিত কমান্ডগুলি চালান:

python manage.py makemigrations

python manage.py migrate

এই কমান্ডগুলির পরে : আপনি দেখতে পাচ্ছেন জাঙ্গো স্বয়ংক্রিয়ভাবে ডেটাবেসে অন্যান্য প্রয়োজনীয় সারণী তৈরি করেছে (প্রায় 10 টি টেবিল রয়েছে)।

python manage.py makemigrations <app_name>

python manage.py migrate

এবং সর্বশেষে: উপরের কমান্ডগুলির পরে আপনার তৈরি সমস্ত মডেল (টেবিল) সরাসরি ডাটাবেসে আমদানি করা হয়।

আশা করি এটি সাহায্য করবে।


0

এই ত্রুটিটি সহ আমার সমস্যাটি ছিল আমি অন্তর্ভুক্ত করেছি:

class Meta:
   abstract = True

আমি যে মডেলটির জন্য মাইগ্রেশন তৈরি করতে চেয়েছিলাম তার ভিতরে।


0

কল করা একটি নতুন অ্যাপ তৈরি করার সময় আমার একটি আলাদা সমস্যা ছিল deals। আমি সেই অ্যাপ্লিকেশনের অভ্যন্তরে মডেলগুলি পৃথক করতে চেয়েছিলাম তাই আমার 2 টি মডেলের ফাইল deals.pyএবং নাম ছিল dealers.py। যখন চলমান python manage.py makemigrationsআমি পেয়েছিলাম: No changes detected

আমি এগিয়ে গিয়েছিলাম এবং __init__.pyসেই একই ডিরেক্টরিতে বাস করে যেখানে আমার মডেল ফাইলগুলি থাকত (ডিলস এবং ডিলার) আমি করেছিলাম

from .deals import *
from .dealers import *

এবং তারপরে makemigrationsকমান্ডটি কাজ করেছিল।

দেখা যাচ্ছে যে আপনি যদি কোথাও মডেলগুলি আমদানি না করেন বা আপনার মডেলগুলির ফাইলের নামটি না হয় models.pyতবে মডেলগুলি সনাক্ত করা যাবে না।

আমার সাথে ঘটে যাওয়া আরেকটি সমস্যা হ'ল আমি অ্যাপটিতে যেভাবে লিখেছি settings.py:

আমার ছিল:

apps.deals

এটির মূল প্রকল্প ফোল্ডারটি অন্তর্ভুক্ত করা উচিত ছিল:

cars.apps.deals
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.