জ্যাঙ্গো দক্ষিণের সাথে পিছনে স্থানান্তর


217

ঠিক আছে, সুতরাং এটি জিজ্ঞাসা করা সত্যিই নির্বোধ জিনিস বলে মনে হচ্ছে এবং আমি নিশ্চিত যে আমি কোথাও কিছু অনুপস্থিত।

জ্যাঙ্গোতে দক্ষিণ ব্যবহার করে আপনি পিছনের দিকে স্থানান্তর কীভাবে সম্পাদন করবেন?

তাই আমি আমার মডেলগুলিকে ট্যুইক করেছি, একটি মাইগ্রেশন তৈরি করেছি, সাথে মাইগ্রেশন schemamigrationচালিয়েছি migrateএবং এখন বুঝতে পারছি যে আমি যা চেয়েছিলাম তা ঠিক নয় এবং আমি আগের মতোই ফিরে চাই want

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

কেউ সাহায্য করতে পারেন?


ভাল প্রশ্ন!!
মার্শাল এক্স

উত্তর:


335

আপনি যেদিকে ফিরে যেতে চান তার ঠিক আগে দেশান্তরের সংখ্যাটি বের করতে হবে।

আপনার অ্যাপ্লিকেশনটির মতো ফাইলগুলির মতো একটি মাইগ্রেশন ডিরেক্টরি থাকতে হবে

0000_initial.py
0001_added_some_fields.py
0002_added_some_more_fields.py
0003_deleted_some_stuff.py

সাধারণত, আপনি যখন চালান ./manage.py migrate your_app, দক্ষিণ ক্রম অনুসারে সমস্ত নতুন স্থানান্তর চালায়। (এটি 'নতুন' কোনটি সিদ্ধান্ত নেওয়ার জন্য এটি ডাটাবেস সারণীর দিকে তাকিয়ে থাকে)।

তবে আপনি সংখ্যা দ্বারা যে কোনও স্থানান্তরও নির্দিষ্ট করতে পারেন, এবং দক্ষিণ আপনার ডাটাবেসটিকে, সামনে বা পিছনে স্থানান্তরিত করবে , এটি এ নিয়ে যেতে। সুতরাং, উপরোক্ত উদাহরণস্বরূপ ফাইলগুলির সাহায্যে আপনি যদি ইতিমধ্যে 0003 অবধি স্থানান্তরিত হয়ে থাকেন এবং আপনি 0003 বিপরীতে চালাতে চান (এটি কার্যকরভাবে কার্যকর করুন), আপনি দৌড়াবেন

./manage.py migrate your_app 0002

দক্ষিণ ডাটাবেসটির দিকে নজর দেবে, বুঝতে পেরেছিল যে এটি ইতিমধ্যে 0003 চলেছে এবং এটি নির্ধারণ করতে পারে যে এটি 0002 এ ফিরে যেতে 0003 এর জন্য বিপরীত স্থানান্তর চালাতে হবে।


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

44
@ এমসিলসনার আপনি যদি সত্যিই চান তবে ডাটাবেসটি ফিরিয়ে আনার পরে প্রদত্ত অ্যাপের মাইগ্রেশন ফোল্ডারে যান (উপরের উদাহরণে আপনার_অ্যাপ / মাইগ্রেশন) এবং অবাঞ্ছিত স্থানান্তর মুছুন
জোশ রুসো

1
ঠিক - দক্ষিণ কখনই মাইগ্রেশন এড়িয়ে যায় না; এটি প্রত্যাশা করে যে 0001-nnnn থেকে প্রাপ্ত ফাইলগুলি nnnn এর যে কোনও মানের জন্য মাইগ্রেশনগুলির একটি সামঞ্জস্যপূর্ণ সেট উপস্থাপন করে। যদি এটি না হয়, তবে আপনাকে নিজেরাই আপত্তিজনক পুনরায় অর্ডার বা মুছতে হবে।
ইয়ান ক্লেল্যান্ড 15

217

কেবলমাত্র যদি (আমার মতো) কেউ প্রাথমিক (0001) থেকে কীভাবে ফিরে যেতে চান তা অবাক করে :

django-admin.py migrate some_app zero

আউটপুট:

Running migrations for some_app:
 - Migrating backwards to zero state.
 < some_app:0001_initial

"শূন্য" কোনও স্থানান্তরের আগে একটি বিশেষ রাষ্ট্র।

তথ্যসূত্র: http://south.aeracode.org/docs/commands.html


6
কেউ 0001 - ফেক স্থানান্তরিত দৌড়েছিল এবং এটিই একমাত্র উপায় 0001 পিছন দিকে চালানো। ধন্যবাদ!
jmanning2k

1
খুব গুরুত্বপূর্ণ উত্তর, আমি কেন migrate 0000কাজ করিনি তা ভাবছিলাম । ভুয়া স্থানান্তর সম্পর্কে, হ্যাঁ, আপনার এটির প্রয়োজন হতে পারে, যদি আপনাকে উদাহরণস্বরূপ কেবলমাত্র (সম্ভবত ভুল) প্রাথমিক মাইগ্রেশনটি পূর্বাবস্থায় ফেলার প্রয়োজন হয় তবে মাইগ্রেশন ইতিহাস মনে করে যে এই মাইগ্রেশনটি কখনও ঘটেনি।
টমাসজ গেন্ডার

3

পরামিতিগুলির শেষে মাইগ্রেশন নাম যুক্ত করুন:

./manage.py migrate app-name 00xx-migration-name

2
এটি ঠিক আছে, এবং আমি এটি আগেও করেছি, তবে এটি অনেকগুলি টাইপিং / আটকানো। খালি "রাষ্ট্র" নম্বর - এই ক্ষেত্রে 00xx- যথেষ্ট। কোনও মাইগ্রেশন উন্নতি ও পরীক্ষার সময় আপনি ইতিহাসে উভয় কমান্ড থাকতে পারেন: পূর্ববর্তী রাষ্ট্রের নম্বর সহ পিছিয়ে (কোনও যুক্তি নেই) backward
টমাসজ গ্যান্ডোর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.