জাজানো ১. - - পরিবর্তনগুলি সনাক্ত না করে মেকমিজারেশন


140

শিরোনামটি যেমন বলেছে, আমি কাজ করে মাইগ্রেশন পেয়ে যাব বলে মনে হচ্ছে না।

অ্যাপ্লিকেশনটি মূলত ১.6 এর নীচে ছিল, তাই আমি বুঝতে পারি যে প্রাথমিকভাবে স্থানান্তরগুলি সেখানে থাকবে না, এবং আমি যদি চালাই তবে আমি পেতাম python manage.py migrate:

Operations to perform:
  Synchronize unmigrated apps: myapp
  Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
  Installing custom SQL...
  Installing indexes...
Running migrations:
  No migrations to apply.

যদি আমি কোনও myappমডেলটিতে পরিবর্তন করি তবে এটি প্রত্যাশিত হিসাবে অভিবাসনবিহীন বলে।

তবে আমি যদি দৌড়ে python manage.py makemigrations myappযাই তবে তা পাব:

No changes detected in app 'myapp'

আমি কমান্ডটি কীভাবে বা কীভাবে চালাচ্ছি তাতে কিছু আসে যায় না, এটি অ্যাপটিকে কোনও পরিবর্তন হয়েছে বলে সনাক্ত করে না এবং অ্যাপটিতে কোনও মাইগ্রেশন ফাইল যুক্ত করছে না।

মাইগ্রেশনগুলিতে কোনও অ্যাপ্লিকেশনকে বাধ্য করার এবং মূলত "এটি আমার সাথে কাজ করার জন্য বেস" বা কোনও কিছু বলার উপায় আছে কি? নাকি আমি কিছু মিস করছি?

আমার ডেটাবেসটি যদি পোস্টগ্র্রেএসকিউএল এক হয় তবে তা যদি কিছুটা সহায়তা করে।


প্রস্তাবিত সমাধানগুলি আমার পক্ষে কাজ করে না তাই যদি কেউ একই সমস্যার মুখোমুখি হয় তবে আমার সমাধান এখানে! ১. সমস্ত অ্যাপ্লিকেশনের অধীনে মাইগ্রেশন ফাইলগুলি মুছুন ২. ডাটাবেস মুছুন এবং এটি আবার তৈরি করুন make. মেকমিগ্রেশন পরিচালনা করুন এবং কমান্ডগুলি স্থানান্তর করুন PS প্রথমে পদক্ষেপ 1 এবং 3 ব্যবহার করে দেখুন। যদি এখনও ত্রুটি থাকে তবে 1-3 টি পদক্ষেপ করুন।
আমোরোসো

উত্তর:


187

আপনি যদি জাজানো ১.6-এ তৈরি কোনও বিদ্যমান অ্যাপ থেকে পরিবর্তিত হন, তবে আপনাকে ডকুমেন্টেশনে তালিকাভুক্ত একটি প্রাক-পদক্ষেপ (যেমন আমি জানতে পেরেছি) করতে হবে:

পাইথন ম্যানেজ.পি মেকমিগ্রেশন আপনার_এপ_লেবেল

ডকুমেন্টেশনটি স্পষ্ট করে দেয় না যে আপনাকে কমান্ডটিতে অ্যাপ লেবেল যুক্ত করা দরকার, কারণ এটি আপনাকে প্রথম কাজটি করতে বলে python manage.py makemigrationsযা ব্যর্থ হবে। প্রাথমিক মাইগ্রেশনটি আপনি 1.7 সংস্করণে আপনার অ্যাপ্লিকেশন তৈরি করার সময় সম্পন্ন করা হয়, তবে আপনি যদি 1.6 থেকে এসে থাকেন তবে এটি সম্পন্ন হত না। দেখুন 'অ্যাপস যোগ করা হচ্ছে মাইগ্রেশন' আরো বিস্তারিত জানার জন্য ডকুমেন্টেশনে।


1
জ্যাঙ্গো ১.6 থেকে আসা লোকদের জন্য দুর্দান্ত উত্তর! ধন্যবাদ!
ডেভিড ডি

1
আমার যদি একাধিক অ্যাপ থাকে তবে কী হবে? আমি python manage.py makemigrations APP_LABELপ্রত্যেকের জন্য করা উচিত ?
Alston

1
জ্যাঙ্গো ১.৯ এর অধীনে এবং আমার অ্যাপটি তৈরি করা হয়েছিল ./manage.py startapp, তবে আমি এখনও স্পষ্টভাবে লেবেলটি উল্লেখ করতে হয়েছিল
অগস্ট

50

নিম্নলিখিত কারণগুলির কারণে এটি ঘটতে পারে:

  1. আপনি অ্যাপ্লিকেশনটিকে INSTALLED_APPSতালিকায় যুক্ত করলেন না settings.py ( অ্যাপ্লিকেশনটির নাম বা অ্যাপ্লিকেশন ফোল্ডারে অ্যাপসফাইটিতে অ্যাপকনফাইগের সাবক্লাসে ডটেড পাথটি যুক্ত করতে হবে, আপনি যে জ্যাঞ্জোর সংস্করণ ব্যবহার করছেন তার উপর নির্ভর করে)। ডকুমেন্টেশন দেখুন: INSTALLED_APPS
  2. migrationsএই অ্যাপগুলির মধ্যে আপনার ফোল্ডার নেই। (সমাধান: কেবলমাত্র সেই ফোল্ডারটি তৈরি করুন)।
  3. এই অ্যাপ্লিকেশনগুলির ফোল্ডারের __init__.pyভিতরে আপনার কাছে ফাইল নেই migrations। (সমাধান: স্রেফ __init__.py নাম দিয়ে একটি খালি ফাইল তৈরি করুন )
  4. __init__.pyঅ্যাপ ফোল্ডারের ভিতরে আপনার কাছে কোনও ফাইল নেই। (সমাধান: স্রেফ __init__.py নাম দিয়ে একটি খালি ফাইল তৈরি করুন )
  5. models.pyঅ্যাপটিতে আপনার কোনও ফাইল নেই
  6. আপনার পাইথন ক্লাস (মডেল বলে মনে করা) এর models.pyউত্তরাধিকারী নয়django.db.models.Model
  7. মডেলগুলির সংজ্ঞায় আপনার কিছু অর্থগত ভুল রয়েছে models.py

দ্রষ্টব্য: একটি সাধারণ ভুল হ'ল migrationsফোল্ডারে ফোল্ডার যুক্ত করা .gitignore। দূরবর্তী রেপো থেকে ক্লোন করা হলে migrationsফোল্ডার এবং / অথবা __init__.pyফাইলগুলি স্থানীয় রেপোতে অনুপস্থিত হবে। এর ফলে সমস্যা হয়।

আমি নীচের লাইনগুলিতে .gitignoreফাইল যুক্ত করে মাইগ্রেশন ফাইলগুলি গিটিগনোর করার পরামর্শ দিচ্ছি

*/migrations/*
!*/migrations/__init__.py

1
আমি আমার প্রোজেক্ট এবং মাইগ্রেশন তাই আমি মাইগ্রেশন পরিচালক যোগ করার জন্য ছিল তারপর আমি যোগ ফোল্ডারের রেপো পর্যন্ত পিছিয়ে দেয় নি ক্লোন করেছে Init .py এবং আমি মাইগ্রেশন করতে সক্ষম হন। আপনাকে ধন্যবাদ
জুনেদ

আমি এখনও স্থাপন না করে এমন একটি প্রকল্পের জিনিসগুলিকে "রিসেট" করতে আমার / মাইগ্রেশন ফোল্ডারের সামগ্রীগুলি মুছে ফেলেছি। আমি অজান্তেই __init__.pyমাইগ্রেশনগুলির সাথে ফোল্ডারটি মুছে ফেললাম ।
শেঠ

এই .... আমার জন্য তা You don't have __init__.py file inside migrations folder of those apps. (Solution: Just create an empty file with name __init__.py).. এবং এটি ফাইল যোগ করে সৃষ্টি হয়েছিল.gitignore
lukik

1
মাইগ্রেশন ফোল্ডারে init .py ফাইলটি কেন এত গুরুত্বপূর্ণ? মাইগ্রেশন করতে? আমি এই যুক্তিটির জন্য আরও গভীর কোথায় খনন করতে পারি?
নিমিশ বানসাল

1
পাইনিথন __init__.pyপ্যাকেজ হিসাবে বিবেচনা করার জন্য @ নিমিশবানসাল অবধি অজগর 3.3 ফাইলের ডিরেক্টরি দরকার inside এটি দেখুন
মোহাম্মদ শরীফ সি

29

ঠিক আছে, দেখে মনে হচ্ছে আমি একটি সুস্পষ্ট পদক্ষেপ মিস করেছি, তবে অন্য কেউ যদি এরকম হয় সে ক্ষেত্রে এটি পোস্ট করা।

1.7 এ আপগ্রেড করার সময়, আমার মডেলগুলি নিয়ন্ত্রণহীন হয়ে পড়ে ( managed = False) - আমার সেগুলি Trueআগের মতোই ছিল তবে মনে হয় এটি আবার ফিরে গেছে।

সেই লাইনটি অপসারণ (ট্রুতে ডিফল্ট করতে) এবং তারপরে চালানো makemigrationsসঙ্গে সঙ্গে মাইগ্রেশন মডিউল তৈরি করেছে এবং এখন এটি কাজ করছে। makemigrationsনিয়ন্ত্রণহীন টেবিলগুলিতে কাজ করবে না (যা পূর্ববর্তী ক্ষেত্রে স্পষ্ট)


4
দয়া করে স্পষ্ট করে বলুন - আপনি "পরিচালিত = মিথ্যা" কোথায় পরিবর্তন করেছেন / যুক্ত করেছেন? আমি একই সমস্যাটি করছি
ইয়কন

1
আমার কাছে আর কোড নেই, তবে আমি সঠিকভাবে মনে রাখলে ক্লাসের সম্পত্তি হিসাবে আমি মনে করি।
অত্যাচারী ওয়েভ

1
ভাল যুক্তি. নোট যা manage.py inspectdbযোগ করে = মিথ্যা! যদি আপনি উত্তরাধিকারের ডাটাবেসগুলি আমদানি করেন তবে আপনাকে অবশ্যই এটি টিউন করতে হবে!
আলেসান্দ্রো ডেন্তেলা

@ অত্যাচারী ওয়েভ, আপনি আমার দিন বাঁচিয়েছেন। অনেক ধন্যবাদ.
উত্কর্ষ শর্মা

আপনার app_labelএকই হয় তা নিশ্চিত করুন
লুভ 33প্রীত

19

আমার সমাধানটি এখানে coveredাকা হয়নি তাই আমি এটি পোস্ট করছি। আমি syncdbএকটি প্রকল্পের জন্য ব্যবহার করে যাচ্ছিলাম – কেবল এটি পেতে এবং চলতে। তারপরে আমি যখন জাঙ্গো মাইগ্রেশনগুলি ব্যবহার শুরু করার চেষ্টা করেছি, এটি প্রথমে তাদের নকল করেছিল তখন বলে যে এটি 'ঠিক আছে' তবে ডাটাবেসে কিছুই হচ্ছে না।

আমার সমাধানটি হ'ল কেবলমাত্র আমার অ্যাপ্লিকেশনের জন্য সমস্ত স্থানান্তর ফাইল মুছে ফেলা, পাশাপাশিdjango_migrations টেবিলের মধ্যে অ্যাপ্লিকেশন স্থানান্তরের ডাটাবেস রেকর্ড ।

তারপরে আমি এইটির সাথে একটি প্রাথমিক স্থানান্তর করেছি:

./manage.py makemigrations my_app

অনুসরণ করেছে:

./manage.py migrate my_app

এখন আমি কোনও সমস্যা ছাড়াই মাইগ্রেশন করতে পারি।


এফওয়াইআই: এটি সমালোচিত যে তিনি এখানে বলেছেন, "ফাইলগুলি, পাশাপাশি ডাটাবেস রেকর্ডগুলিও।" আপনি যদি ডাটাবেস রেকর্ডগুলি অপসারণ করেন তবে ফাইলগুলিও না (ব্যতীত __init.py__এটি কাজ করবে না
মাইক রবিনসন

15

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

  1. আপনি যে বৈশিষ্ট্যটি যুক্ত করছেন তার অনুরূপ নামের সাথে পদ্ধতিটি সরান।
  2. ম্যানেজ.পি মেকমিগ্রেশনস My_app
  3. ম্যানেজ.পি মাইগ্রেশন মাই_এপ
  4. পদ্ধতিগুলি আবার যুক্ত করুন।

11

এটি করা একটি নির্বোধ ভুল, তবে মডেল শ্রেণিতে ফিল্ড ডিক্লেয়ারেশন লাইন শেষে অতিরিক্ত কমা থাকা, লাইনের কোনও প্রভাব ফেলবে না।

আপনি যখন ডিএফ পেস্ট করবেন তখন এটি ঘটে। স্থানান্তর থেকে, যা নিজেই অ্যারে হিসাবে সংজ্ঞায়িত হয়।

যদিও এটি কাউকে সাহায্য করবে :-)


1
আপনার মন্তব্য আমাকে আমার সমস্যা খুঁজে পেতে সাহায্য! আমার পছন্দের তালিকার শেষ পছন্দটির শেষে কমা ছিল না..জায়্পে জাজানো খুব স্পর্শকাতর।
ম্যাক্সিম

1
@ ম্যাক্সিম: এটি আপনার সমস্যার কারণ সম্ভবত ছিল না: শেষে কমা ব্যতীত একটি তালিকা এখনও একটি তালিকা। আর একটি বিষয় টিপলস: আপনার যদি একটি টিপলে কেবলমাত্র 1 টি উপাদান থাকে তবে এর পরে আপনার কমা প্রয়োজন।
ব্লুফাস্ট

বাবু যে আমাকে অনেক সময় বাঁচিয়েছে! @ ড্যাংনফেষ্ট: মডেল সংজ্ঞায় এটি আসলেই একটি সমস্যা।
মিঃ ই

11

হতে পারে আমি খুব দেরী করেছি কিন্তু আপনি কি migrationsআপনার অ্যাপ্লিকেশনটিতে কোনও __init__.pyফাইলের সাথে একটি ফোল্ডার রাখার চেষ্টা করেছিলেন?


1
আপনার যদি এই "মেকমিজারেশন" থাকে তবে অ্যাপটির জন্য মাইগ্রেশন তৈরি হবে। অন্যথায় এটির জন্য আপনাকে মেকিমিগ্রেশন অ্যাপ_নাম চালিয়ে নেওয়া প্রয়োজন (যা এই ফাইলগুলি তৈরি করে)
স্কট ওয়ারেন

7

সম্ভবত এটি কাউকে সাহায্য করবে। আমি নেস্টেড অ্যাপ ব্যবহার করছিলাম। প্রজেক্ট.অ্যাপনেম এবং আমার প্রকৃতপক্ষে INSTALLED_APPS এ প্রজেক্ট এবং প্রজেক্ট.অ্যাপনাম ছিল। INSTALLED_APPS থেকে প্রকল্পটি সরানোর ফলে পরিবর্তনগুলি সনাক্ত করা যায়।


7

উত্তরটি স্ট্যাকওভারফ্লো পোস্টে, সিডিভিভি 7878৮৮ দ্বারা জ্যাঙ্গো ১.7 এ স্থানান্তরিত

আপনি যদি সেই অ্যাপ্লিকেশনটি প্রথমবার স্থানান্তর করতে চান তবে:

ম্যানেজ.পি মেকমিগ্রেশনস মাইএপনেম একবার আপনি এটি করতে পারেন যে আপনি এটি করতে পারেন:

ম্যানেজ.পি মাইগ্রেশন যদি আপনার অ্যাপ্লিকেশনটি ডেটাবেসে থাকে, এর মডেলটি সংশোধন করেছেন এবং এটি সম্ভবত মাইগ্রেশন করেছেন এমন মেকিমিগ্রেশনে পরিবর্তনগুলি আপডেট না করে। আপনার মডেলটিকে তার মূল ফর্মটিতে ফিরে যান, প্রথম কমান্ডটি চালান (অ্যাপের নাম সহ) এবং মাইগ্রেট করুন ... এটি এটি নকল করবে। একবার আপনি এটি আপনার মডেলটিতে পরিবর্তনগুলি ফিরিয়ে আনলে, মেকমিগ্রেশন চালান এবং আবার মাইগ্রেশন করুন এবং এটি কাজ করা উচিত।

আমার ঠিক একই সমস্যা ছিল এবং উপরেরটি পুরোপুরি কাজ করেছিল worked

আমি আমার জ্যাঙ্গো অ্যাপ্লিকেশনটি ক্লাউড 9 এ সরিয়েছি এবং কোনও কারণে আমি প্রথম স্থানান্তরকে কখনই ধরতে পারি নি।


7

নিম্নলিখিত আমার জন্য কাজ করেছে:

  1. অ্যাপ্লিকেশনটির নাম সেটিংস.পিতে যুক্ত করুন
  2. 'পাইথন ম্যানেজ.পি মেকিমিগ্রেশনস' ব্যবহার করুন
  3. 'পাইথন ম্যানেজ.পি মাইগ্রেশন' ব্যবহার করুন

আমার জন্য কাজ করেছেন: পাইথন 3.4, জ্যাঙ্গো 1.10


6

আমার মতো লোকেরা যারা মাইগ্রেশন পছন্দ করেন না তারা নীচের পদক্ষেপগুলি ব্যবহার করতে পারেন।

  1. আপনি কী সিঙ্ক করতে চান তা পরিবর্তন করুন।
  2. চালান python manage.py makemigrations app_labelপ্রাথমিক মাইগ্রেশন জন্য।
  3. চালান python manage.py migrateটেবিল তৈরি করার আগে আপনি পরিবর্তন করতে হবে।
  4. প্রথম পদক্ষেপে আপনি মুছে ফেলা পরিবর্তনগুলি আটকান।
  5. 2. এবং 3. পদক্ষেপ চালান।

আপনি যদি এই পদক্ষেপগুলির কোনওটি বিভ্রান্ত করেন তবে মাইগ্রেশন ফাইলগুলি পড়ুন। আপনার স্কিমা সংশোধন করতে বা অযাচিত ফাইলগুলি সরাতে তাদের পরিবর্তন করুন তবে পরবর্তী স্থানান্তর ফাইলের নির্ভরতার অংশটি পরিবর্তন করতে ভুলবেন না;)

আমি আশা করি এটি ভবিষ্যতে কাউকে সহায়তা করবে।


5

আপনি চেক করতে চান settings.pyমধ্যে INSTALLED_APPSতালিকা এবং নিশ্চিত করুন যে মডেলের সঙ্গে অ্যাপ্লিকেশান সেখানে তালিকাভুক্ত করা হয়।

makemigrationsপ্রকল্পের ফোল্ডারে চলার অর্থ এটি settings.pyপ্রকল্পের জন্য অন্তর্ভুক্ত সমস্ত অ্যাপ্লিকেশন সম্পর্কিত সমস্ত টেবিল আপডেট করার সন্ধান করবে । একবার আপনি এটি অন্তর্ভুক্ত করার পরে, makemigrationsস্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশনটি অন্তর্ভুক্ত করবে (এটি প্রচুর পরিমাণ কাজ সাশ্রয় makemigrations app_nameকরে যাতে আপনার প্রকল্প / সাইটের প্রতিটি অ্যাপের জন্য আপনাকে চালনা করতে না হয় )।


5

কেবলমাত্র যদি আপনার নির্দিষ্ট ক্ষেত্র থাকে যা Makemigration দ্বারা সনাক্ত করা যায় না: একই নামে আপনার কোনও সম্পত্তি আছে কিনা তা দুবার পরীক্ষা করে দেখুন।

উদাহরণ:

field = django.db.models.CharField(max_length=10, default = '', blank=True, null=True)

# ... later

@property
def field(self):
    pass

সম্পত্তি ক্ষেত্রের সংজ্ঞাটি "ওভাররাইট" করবে যাতে পরিবর্তনগুলি সনাক্ত করে না makemigrations


সম্পর্কিত বোমারটি এমন একটি ত্রুটিযুক্ত ক্ষেত্র রয়েছে যা এখনও বৈধতা / চেক থেকে পালিয়ে যায়। আমি সংজ্ঞায়িত করেছি hourly_rate = models.DecimalField(অনুপস্থিত '()' মিস করছি) এবং এটি নিঃশব্দে ব্যর্থ হয়েছে।
sষি

5

নিশ্চিত করুন যে আপনার মডেলটি নেই abstract। আমি আসলে সেই ভুলটি করেছিলাম এবং এতে কিছুক্ষণ সময় লেগেছে, তাই আমি ভেবেছিলাম এটি পোস্ট করব।


4

এই উত্তরটি যুক্ত করা হচ্ছে কারণ কেবল এই পদ্ধতিটি আমাকে সহায়তা করেছিল।

আমি migrationsফোল্ডারটি রান makemigrationsএবং মুছে ফেলেছি migrate
এটি এখনও বলেছে: প্রয়োগের জন্য কোনও মাইগ্রেশন নেই।

আমি migrateফোল্ডারে গিয়ে সর্বশেষ তৈরি করা ফাইলটি খুললাম,
আমার যে মাইগ্রেশনটি চেয়েছিল তা মন্তব্য কর (এটি সনাক্ত হয়েছিল এবং সেখানে প্রবেশ করা হয়েছিল)
এবং migrateআবার দৌড়াতে হবে ।

এটি মাইগ্রেশন ফাইল ম্যানুয়ালি সম্পাদনা করে।
আপনি যদি ফাইলের বিষয়বস্তু বুঝতে চান তবে এটি করুন।


1
তোমাকে অনেক ধন্যবাদ! এটি সহায়তা করেছে
শার্পলেস 512

3

আপনি কি schemamigration my_app --initialপুরানো মাইগ্রেশন ফোল্ডারটির নাম পরিবর্তন করে ব্যবহার করেছেন ? চেষ্টা করে দেখুন কাজ করতেও পারে. যদি তা না হয় - ডাটাবেসটি পুনরায় তৈরি করার চেষ্টা করুন এবং সিঙ্কডিবি + মাইগ্রেট করার চেষ্টা করুন। এটি আমার জন্য কাজ করেছে ...


10
কোন আদেশ schemamigrationনেই - আমি মনে করি এটি দক্ষিণের অংশ? আমার কাছে বর্তমানে কোনও স্থানান্তর ফোল্ডার নেই। আমার অপসারণ models.pyএবং পুনরায় চালনা করা inspectdbকিছু করার মনে হয়নি।
অত্যাচারী ওয়েভ

2
schemamigrationদক্ষিণ থেকে ছিল। makemigrationsএটি তার প্রতিস্থাপন।
ক্রেগ ল্যাবেঞ্জ

2
এটি এখনও বৈধ। তবে এটিতে পরিবর্তিত হয়makemigrations --empty
আইলিয়াস কর্ট

2

একই সমস্যা ছিল তা নিশ্চিত করুন আপনি মডেল.পাইতে যা ক্লাস সংজ্ঞায়িত করেছেন, আপনার অবশ্যই মডেলদের উত্তরাধিকারী হতে হবে। মডেল ক্লাস।

class Product(models.Model):
    title = models.TextField()
    description = models.TextField()
    price = models.TextField()

1

আমার দুবার মেকিমিগ্রেশন চালানো এবং সব ধরণের অদ্ভুত আচরণ নিয়ে একই সমস্যা ছিল। দেখা গেল সমস্যার মূলটি হ'ল আমি আমার মডেলগুলিতে ডিফল্ট তারিখগুলি নির্ধারণ করার জন্য একটি ফাংশন ব্যবহার করছিলাম যাতে প্রতিবার মেকমিগ্রেশন চালানোর সময় মাইগ্রেশন একটি পরিবর্তন সনাক্ত করতে পারে। এই প্রশ্নের উত্তর আমাকে সঠিক পথে ফেলেছে : তারিখের ক্ষেত্রটি পুনরায় তৈরি করতে মেকমিগ্রেশনগুলি এড়িয়ে চলুন


1

আমি সম্প্রতি জ্যাঙ্গোকে 1.6 থেকে 1.8 থেকে আপগ্রেড করেছি এবং তাদের জন্য কয়েকটি অ্যাপস এবং মাইগ্রেশন ছিল। আমি দক্ষিণে এবং schemamigrationsজ্যাঙ্গো ১.6 এ মাইগ্রেশন তৈরির জন্য ব্যবহার করেছি , যা জ্যাঙ্গো ১.৮ এ বাদ পড়েছে।

আমি যখন আপগ্রেডের পরে নতুন মডেল যুক্ত করেছি, makemigrationsকমান্ডটি কোনও পরিবর্তন সনাক্ত করছে না। এবং তারপরে আমি @ hydrojf (1 ম উত্তর) এর প্রস্তাবিত সমাধানটি চেষ্টা করেছিলাম, এটি দুর্দান্ত কাজ করেছে, তবে জাল প্রাথমিক মাইগ্রেশন ( python manage.py --fake-initial) প্রয়োগ করতে ব্যর্থ হয়েছে । আমার টেবিলগুলি (পুরানো সারণী) ইতিমধ্যে তৈরি করা হওয়ায় আমি এটি করছিলাম।

অবশেষে এটি আমার পক্ষে কাজ করেছে, মডেল.পি থেকে নতুন মডেল (বা মডেল পরিবর্তনগুলি) সরিয়েছে এবং তারপরে সমস্ত অ্যাপ্লিকেশনের মাইগ্রেশন ফোল্ডারটি মুছে ফেলতে হবে এবং manage.pyসমস্ত অ্যাপ্লিকেশনের জন্য পাইথন মেকমিগ্রেশন চালাতে হবে, তারপরেও করেছিল python manage.py migrate --fake-initial। এটা চমত্কার ভাবে কাজ করেছে. সমস্ত অ্যাপ্লিকেশনগুলির জন্য প্রাথমিক মাইগ্রেশন তৈরি হয়ে গেলে এবং নকল প্রাথমিক স্থানান্তরিত হয়ে যায়, তারপরে নতুন মডেল যুক্ত হয় এবং নিয়মিত প্রক্রিয়া অনুসরণ করে makemigrationsএবং সেই অ্যাপ্লিকেশনটিতে মাইগ্রেট হয়। পরিবর্তনগুলি এখন সনাক্ত করা হয়েছে এবং সবকিছু ঠিকঠাক হয়েছে।

আমি কেবল এটি এখানে ভাগ করে নেওয়ার কথা ভেবেছি, যদি কেউ একই সমস্যার মুখোমুখি হয় ( schemamigrationsতাদের অ্যাপ্লিকেশনগুলির জন্য দক্ষিণে থাকা), এটি তাদের সহায়তা করতে পারে :)


1

সম্ভবত এটি কাউকে সহায়তা করতে পারে, আমারও একই সমস্যা ছিল।

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

আমি এই পদক্ষেপগুলি অনুসরণ করেছি:

  1. আমি তৈরী করেছি .\manage.py makemigrations app
  2. মৃত্যুদণ্ড কার্যকর করলাম .\manage.py migrate
  3. আমি আমার দুটি টেবিল মুছে ফেলেছি models.py
  4. আমি আমার টেবিলগুলির সমস্ত রেফারেন্স সিরিয়ালাইজার এবং দেখুন শ্রেণীর থেকে মুছলাম।
  5. আমি পদক্ষেপ কার্যকর 1এবং 2
  6. আমি ঠিক আমার পরিবর্তনগুলি পুনরুদ্ধার করেছি models.py
  7. আমি আবার পদক্ষেপ কার্যকর 5
  8. আমি আমার সমস্ত পরিবর্তন পুনরুদ্ধার করেছি।

আপনি যদি পাইচার্মের সাথে কাজ করছেন তবে স্থানীয় ইতিহাসটি খুব সহায়ক।


1

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

আমি আমার মুছে ফেলেছি models.pyএবং বিবৃতি makemigrationsতৈরি করার প্রত্যাশা করেছি DeleteModel

*.pycফাইল মুছতে ভুলবেন না !


1
./manage makemigrations
./manage migrate

মাইগ্রেশনগুলি ডিবিতে পরিবর্তনগুলি ট্র্যাক করে তাই আপনি যদি পরিচালনা ব্যবস্থা থেকে নিয়ন্ত্রণহীন থেকে পরিবর্তন হয়ে থাকেন তবে আপনাকে নিশ্চিত করতে হবে যে আপনি যে মডেলটির সাথে কাজ করছেন তার সাথে আপনার ডাটাবেস টেবিলটি আপ টু ডেট রয়েছে।

আপনি যদি এখনও ডি মোডে থাকেন তবে আমি ব্যক্তিগতভাবে আমার আইডিইর পাশাপাশি আমার মডেল সম্পর্কিত django_migration টেবিলের মধ্যে স্থানান্তর ফাইলগুলি মুছে ফেলার সিদ্ধান্ত নিয়েছি এবং উপরের কমান্ডটি পুনরায় চালু করব।

মনে রাখবেন: আপনার যদি কোনও মাইগ্রেশন হয় যা আপনার IDE- এ _001 এবং আপনার ডাটাবেসে _003 দিয়ে শেষ হয়। জ্যাঙ্গো কেবলমাত্র কোনও আপডেট করার জন্য _004 দিয়ে মাইগ্রেশন শেষ হচ্ছে কিনা তা দেখতে পাবে।

2 (কোড এবং ডিবি স্থানান্তর) লিঙ্কযুক্ত এবং মিলিয়ে কাজ করে work

শুভ কোডিং।


1
  1. আপনি কী সিঙ্ক করতে চান তা পরিবর্তন করুন।
  2. প্রাথমিক মাইগ্রেশনের জন্য পাইথন ম্যানেজ.পি মেকমিগ্রেশনস অ্যাপ_লাবেল চালান।
  3. আপনি পরিবর্তন করার আগে টেবিল তৈরির জন্য পাইথন ম্যানেজ.পি মাইগ্রেট চালান।
  4. প্রথম পদক্ষেপে আপনি মুছে ফেলা পরিবর্তনগুলি আটকান।
  5. 2. এবং 3. পদক্ষেপ চালান

0

এই উত্তরটি যুক্ত করা হয়েছে কারণ উপরোক্ত উপলভ্য আর কেউই আমার পক্ষে কাজ করেনি।

আমার ক্ষেত্রে আরও অদ্ভুত কিছু ঘটছিল ( জাঙ্গো ১.7 সংস্করণ ), আমার মডেল.পি- তে আমার ফাইলের শেষে আমার একটি "অতিরিক্ত" লাইন ছিল (এটি একটি ফাঁকা লাইন ছিল) এবং আমি যখন python manage.py makemigrationsআদেশটি কার্যকর করি তখন ফলাফলটি ছিল: "কোনও পরিবর্তন সনাক্ত করা হয়নি"।

এটি ঠিক করার জন্য আমি এই "ফাঁকা লাইন" মুছে ফেললাম যা আমার মডেলস.পি ফাইলের শেষে ছিল এবং আমি আবার কমান্ডটি চালিয়েছি , সবকিছু ঠিক হয়ে গেছে এবং মডেল.পি-তে করা সমস্ত পরিবর্তন সনাক্ত করা গেছে!


জ্যাঙ্গো ২.০-তে ঠিক আছে যে খালি লাইনটি আমি বিশ্বাস করি, আপনি যে বন্ধুটি করেছিলেন তার বিপরীতে আমাকে করতে হয়েছিল
সুমিত কুমার সাহা

@ সুমিতকুমারসাহা হাঃ আমি বর্তমানে জাজানো ১.7 সংস্করণ ব্যবহার করছি এবং সেই ফাঁকা লাইনটি হিজরতের ত্রুটি সমাধানের জন্য সমস্ত চেষ্টা করার জন্য ২ ঘন্টা চেষ্টা করেছিল। সুমিত ভাগ করে নেওয়ার জন্য ধন্যবাদ। আপনার দিনটি
শুভ হোক

0

নীচের কমান্ডটি ব্যবহার করে আপনাকে প্রাথমিক মাইগ্রেশন জাল করতে হবে

python manage.py migrate --fake-initial

0

প্রথম এই সমাধানটি হিরকু সার্ভারে স্থাপনার সময় যারা একই সমস্যার মুখোমুখি হয়েছিল তাদের ক্ষেত্রে প্রযোজ্য, আমি একই সমস্যার মুখোমুখি ছিলাম।

মোতায়েনের জন্য, একটি বাধ্যতামূলক পদক্ষেপ রয়েছে যা সেটিংস.পাই ফাইলটিতে django_heroku.settings (স্থানীয় ()) যুক্ত করা হয়।

পরিবর্তনগুলি: যখন আমি উপরের লাইনটি জাজো_হেরোকু.সেটেটিংগুলি (স্থানীয় (), ডাটাবেসগুলি = মিথ্যা) এ পরিবর্তন করেছি, তখন এটি নির্দোষভাবে কাজ করেছিল।


0

আমার ক্ষেত্রে যেখানে আমার মডেলটি সংজ্ঞায়িত করা হয়েছিল সেই মডেলগুলির ফোল্ডারের _ init _.py ফাইলটিতে আমার মডেল যুক্ত করা দরকার:

from myapp.models.mymodel import MyModel

-1

আমার 2 সি যোগ করা হচ্ছে, যেহেতু এই সমাধানগুলির কোনওটিই আমার পক্ষে কাজ করে নি, তবে এটি করেছে ...

আমি সবেমাত্র manage.py squashmigrationsপুরানো মাইগ্রেশন চালিয়েছি এবং মুছে ফেলেছি (django.migration ডাটাবেস টেবিলের ফাইল এবং লাইন উভয়)।

এটি শেষ মাইগ্রেশন ফাইলে এর মতো একটি রেখা ফেলেছে:

replaces = [(b'my_app', '0006_auto_20170713_1735'), (b'my_app', '0007_auto_20170713_2003'), (b'my_app', '0008_auto_20170713_2004')]

এটি স্পষ্টতই জ্যাঙ্গোকে বিভ্রান্ত করেছিল এবং এক অদ্ভুত আচরণের কারণ ঘটেছে: manage.py makemigrations my_appদৌড়াদৌড়ি প্রাথমিক অভিবাসনকে এমনভাবে পুনরুত্থিত করবে যেন কারও অস্তিত্ব নেই। replaces...লাইন মুছে ফেলা সমস্যার সমাধান!


-1

পাইথন ম্যানেজ.পি মেকমিগ্রেশন অ্যাকাউন্টস 'অ্যাকাউন্টস'-এর জন্য মাইগ্রেশন: অ্যাকাউন্টস \ মাইগ্রেশন \ 0001_initial.py - মডেল গ্রাহক তৈরি করুন - মডেল ট্যাগ তৈরি করুন - মডেল পণ্য তৈরি করুন - মডেল অর্ডার তৈরি করুন

দ্রষ্টব্য: এখানে "অ্যাকাউন্টগুলি" আমার অ্যাপ্লিকেশন নাম

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