কীভাবে একটি জ্যাঙ্গো অ্যাপের নাম পরিবর্তন করবেন?


156

আমি জ্যাঙ্গোর একটি অ্যাপ্লিকেশনটির ফোল্ডার, আমদানি এবং এর সমস্ত রেফারেন্স (টেমপ্লেট / সূচীকরণ) এর নাম পরিবর্তন করে নাম পরিবর্তন করেছি। তবে আমি চালানোর চেষ্টা করার সময় আমি এই ত্রুটিটি পেয়েছিpython manage.py runserver

Error: Could not import settings 'nameofmynewapp.settings' (Is it on sys.path?): No module named settings

আমি কীভাবে এই ত্রুটিটি ডিবাগ এবং সমাধান করতে পারি? কোন সংকেত সনাক্ত করুন?


হাই দানিহপ হ্যাঁ আমার আছে. আমিও ভার্চুয়ালেনভ ব্যবহার করছি, আমি জানি না এর সাথে কিছু করার আছে কিনা।
আন্দ্রে

1
যদি কোনও সুযোগে আপনি পাইচার্ম ব্যবহার করছেন তবে এর renameবৈশিষ্ট্যটি আপনাকে এটিকে ব্যাপকভাবে সহায়তা করবে।
Anto

1
দক্ষিণ কি এই ধরনের অপারেশন সাপোর্ট করছে না?
andilabs

উত্তর:


285

জ্যাঙ্গোতে একটি অ্যাপের নাম পরিবর্তন করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার প্রকল্পের মূলের ফোল্ডারটির নাম পরিবর্তন করুন
  2. তাদের নির্ভরতা আপনার অ্যাপে কোনো রেফারেন্স পরিবর্তন করুন অর্থাৎ অ্যাপ্লিকেশনের views.py, urls.py'manage.py', এবং settings.pyফাইল।
  3. django_content_typeনিম্নলিখিত কমান্ডের সাহায্যে ডাটাবেস সারণি সম্পাদনা করুন :UPDATE django_content_type SET app_label='<NewAppName>' WHERE app_label='<OldAppName>'
  4. এছাড়াও আপনার যদি মডেল থাকে তবে আপনাকে মডেল টেবিলগুলির নতুন নাম রাখতে হবে। Postgres ব্যবহারের জন্য ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName। মাইএসকিএল-এর জন্যও আমি মনে করি এটি একই (@ নাল_আরডিক্স দ্বারা উল্লিখিত)
  5. (জ্যাঙ্গো> = 1.7 জন্য) আপডেট করুন django_migrationsটেবিল আপনার পূর্ববর্তী মাইগ্রেশন পুনরায় চালানোর থাকার এড়াতে: UPDATE django_migrations SET app='<NewAppName>' WHERE app='<OldAppName>'দ্রষ্টব্য : জাজানো ১.৮++ এর জন্য এই পদক্ষেপটি প্রয়োজন হলে কিছু বিতর্ক রয়েছে (মন্তব্যে); কেউ যদি নিশ্চিতভাবে জানেন তবে দয়া করে এখানে আপডেট করুন।
  6. যদি আপনার models.pyমেটা ক্লাস app_nameতালিকাভুক্ত করে থাকে তবে সেটিও নাম পরিবর্তন করে নিশ্চিত করুন (@ উইল উল্লেখ করেছেন)।
  7. আপনি যদি নিজের অ্যাপ্লিকেশনের ভিতরে নিজের staticবা templatesফোল্ডারগুলির নাম গতিময় করেন তবে আপনাকে সেগুলি পুনরায় নামকরণও করতে হবে। উদাহরণস্বরূপ, নাম পরিবর্তন old_app/static/old_appকরুন new_app/static/new_app
  8. জাঙ্গো নামকরণের জন্য models, আপনাকে django_content_type.nameডিবিতে প্রবেশ পরিবর্তন করতে হবে । PostgreSQL ব্যবহারের জন্যUPDATE django_content_type SET name='<newModelName>' where name='<oldModelName>' AND app_label='<OldAppName>'

মেটা পয়েন্ট (যদি ভার্চুয়ালেনভ ব্যবহার করা হয়): লক্ষণীয় বিষয়, আপনি যদি আপনার ভার্চুয়ালেনভ ধারণ করে এমন ডিরেক্টরিটি পরিবর্তন করে থাকেন তবে আপনার vেভিতে সম্ভবত বেশ কয়েকটি ফাইল থাকতে পারে যা একটি পরম পথ রয়েছে এবং এটি আপডেট করার প্রয়োজনও রয়েছে। আপনি যদি ত্রুটি পেতে থাকেন ImportError: No module named ...তবে এটিই হতে পারে অপরাধী। (এটি সরবরাহ করার জন্য @ উদ্যানম্যাচাইনকে ধন্যবাদ)।

অন্যান্য তথ্যসূত্র: আপনি আরও সম্পূর্ণ ছবির জন্য নীচের লিঙ্কগুলি উল্লেখ করতে চাইতে পারেন

  1. জ্যাঙ্গো এবং দক্ষিণের সাথে একটি অ্যাপের নামকরণ
  2. আমি কীভাবে একটি জ্যাঙ্গো অ্যাপ্লিকেশন থেকে কোনও নতুন মডেলটিতে স্থানান্তর করব?
  3. কীভাবে একটি জ্যাঙ্গো অ্যাপের নাম পরিবর্তন করবেন?
  4. জ্যাঙ্গো দক্ষিণের সাথে পিছনে স্থানান্তর
  5. জ্যাঙ্গো / দক্ষিণ ব্যবহার করে কোনও মডেলটির নামকরণের সবচেয়ে সহজ উপায়?
  6. উপরের পদক্ষেপগুলি স্বয়ংক্রিয় করার জন্য পাইথন কোড (এ। রউফকে ধন্যবাদ ) (অরীক্ষিত কোড You আপনাকে সতর্ক করা হয়েছে!)
  7. উপরের পদক্ষেপগুলি স্বয়ংক্রিয় করতে পাইথন কোড ( রাফাপনিমনকে ধন্যবাদ ) (অরক্ষিত কোড You আপনাকে সতর্ক করা হয়েছে!)

3
এছাড়াও আপনার যদি মডেল থাকে তবে আপনাকে মডেল টেবিলগুলির নতুন নাম রাখতে হবে। ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName
পোস্টগ্রাগেস

11
এবং আপনি যদি নতুন মাইগ্রেশন ব্যবহার করছেন তবে আপনাকে বিদ্যমান মাইগ্রেশন ফাইল এবং জ্যাঞ্জো_মিগ্রেশন সারণিতে অ্যাপের নাম পরিবর্তন করতে হবে। প্রথমে স্কোয়াশ মাইগ্রেশন করা ভাল হতে পারে তাই সম্পাদনার কম আছে।
জেমস

7
পোস্টগ্রিসের জন্য, আপনি যদি সিক্যুয়েন্সটিরও নাম পরিবর্তন করতে চান তবে ব্যবহার করুন ALTER SEQUENCE <oldAppName>_<modelName>_<PK>_seq RENAME TO <newAppName>_<modelName>_<PK>_seq;। যদিও এটি প্রয়োজনীয় নয়, সিস্টেম নিজেই নামটির বিষয়ে চিন্তা করে না। ডিফল্ট কলামটি একটি OID( 'foo_pkey_seq'::regclass) সংরক্ষণ করে, আপনি সেটিকে ভঙ্গ না করে ক্রমের নাম পরিবর্তন করতে পারেন - ওআইডি একই থাকে।
কনস্ট্যান্টাইন কালবাজভ

3
মাইগ্রেশন ফাইলগুলি আপগ্রেড করার বিষয়ে জেমস যা বলেছিল তা অন্তর্ভুক্ত করার জন্য আপনি নিজের উত্তরটি আপডেট করলে (যেমন নির্ভরতা মডিউলের নাম) ... বেশিরভাগ ক্ষেত্রেই তা বুঝতে পারিনি।
u3l

2
এখানে একটি পরিচালনা কমান্ড যা @ শ্রীকার অ্যাপলারাজুর সমাধান অনুসারে মডেলটির নামকরণের জন্য অনুমতি দেয়: gist.github.com/rafaponieman/201054ddf725cda1e60be3fe845850a5 এটি পরামিতি হিসাবে পুরাতন নাম, নতুন_নাম এবং ক্লাসগুলি গ্রহণ করে (ডাটাবেস টেবিল এবং ক্ষেত্রগুলি দেখে তারা সমস্ত ফর্ম্যাট করে)।
rafaponieman

32

জাজানো ১.7 এ নতুন একটি অ্যাপ্লিকেশন রেজিস্ট্রি যা কনফিগারেশন সঞ্চয় করে এবং অন্তঃনির্দেশ সরবরাহ করে। এই যন্ত্রপাতি আপনাকে কয়েকটি অ্যাপ বৈশিষ্ট্য পরিবর্তন করতে দেয়।

আমি যে মূল পয়েন্টটি তৈরি করতে চাই তা হ'ল একটি অ্যাপের নামকরণ সবসময় প্রয়োজন হয় না: অ্যাপ্লিকেশন কনফিগারেশনের মাধ্যমে বিরোধী অ্যাপ্লিকেশনগুলিকে সমাধান করা সম্ভব to আপনার অ্যাপ্লিকেশনটি বন্ধুত্বপূর্ণ নামকরণের প্রয়োজন হলে যাবার উপায়।

উদাহরণ হিসাবে আমি আমার পোল অ্যাপটির নাম 'ব্যবহারকারীদের কাছ থেকে প্রতিক্রিয়া' রাখতে চাই। এটা এইভাবেই চলে:

ডিরেক্টরিতে একটি apps.pyফাইল তৈরি করুন polls:

from django.apps import AppConfig

class PollsConfig(AppConfig):
    name = 'polls'
    verbose_name = "Feedback from users"

আপনার ডিফল্ট অ্যাপ্লিকেশন কনফিগারেশন যুক্ত করুন polls/__init__.py:

default_app_config = 'polls.apps.PollsConfig'

আরও অ্যাপ্লিকেশন কনফিগারেশনের জন্য: https://docs.djangoproject.com/en/1.7/ref/applications/


13

মজার সমস্যা! আমি শীঘ্রই প্রচুর অ্যাপগুলির নতুন নামকরণ করতে যাচ্ছি, তাই আমি শুকনো রান করলাম।

আপনি যে নামটি পরিবর্তন করছেন অ্যাপটিতে কাজ করে এমন অন্যান্য বিকাশকারীদের জন্য বাধা হ্রাস করতে এই পদ্ধতিটি পারমাণবিক পদক্ষেপে অগ্রগতি ঘটাতে সহায়তা করে।

কার্যকারী উদাহরণ কোডের জন্য এই উত্তরটির নীচে লিঙ্কটি দেখুন।

  1. সরানোর জন্য বিদ্যমান কোড প্রস্তুত করুন :
    • একটি অ্যাপ্লিকেশন কনফিগারেশন তৈরি করুন (সেট nameএবং labelডিফল্টগুলিতে)।
    • এতে অ্যাপ্লিকেশন কনফিগারেশন যুক্ত করুন INSTALLED_APPS
    • সমস্ত মডেলগুলিতে, স্পষ্টভাবে db_tableবর্তমান মানটিতে সেট করুন ।
    • ডাক্তার স্থানান্তরগুলি যাতে db_table"সর্বদা" স্পষ্টভাবে সংজ্ঞায়িত হয়েছিল।
    • নিশ্চিত করুন যে কোনও স্থানান্তর প্রয়োজন নেই (পূর্ববর্তী পদক্ষেপটি পরীক্ষা করে দেখুন)।
  2. অ্যাপ্লিকেশন লেবেল পরিবর্তন করুন :

    • labelঅ্যাপ্লিকেশন কনফিগারেশনে নতুন অ্যাপের নামে সেট করুন।
    • নতুন অ্যাপের লেবেলটিকে রেফারেন্স করতে মাইগ্রেশন এবং বিদেশী কীগুলি আপডেট করুন।
    • জেনেরিক বর্গ-ভিত্তিক দর্শনগুলির জন্য টেম্পলেটগুলি আপডেট করুন ( ডিফল্ট পাথটি হ'ল<app_label>/<model_name>_<suffix>.html )
    • মাইগ্রেশন এবং content_typesঅ্যাপ্লিকেশন ঠিক করার জন্য কাঁচা এসকিউএল চালান (দুর্ভাগ্যক্রমে, কিছু কাঁচা এসকিউএল অনিবার্য)। আপনি কোনও মাইগ্রেশনে এটি চালাতে পারবেন না।

      UPDATE django_migrations
         SET app = 'catalogue'
       WHERE app = 'shop';
      
      UPDATE django_content_type
         SET app_label = 'catalogue'
       WHERE app_label = 'shop';
    • নিশ্চিত করুন যে কোনও স্থানান্তর প্রয়োজন নেই (পূর্ববর্তী পদক্ষেপটি পরীক্ষা করে দেখুন)।

  3. টেবিলগুলির নাম পরিবর্তন করুন :
    • "কাস্টম" সরান db_table
    • চালান makemigrationsতাই জাজানো টেবিলটির নাম "ডিফল্ট" রাখতে পারে।
  4. ফাইলগুলি সরান :
    • মডিউল ডিরেক্টরিটির নতুন নাম দিন।
    • আমদানি ঠিক করুন।
    • অ্যাপ্লিকেশন কনফিগারেশন আপডেট করুন name
    • INSTALLED_APPSঅ্যাপ্লিকেশন কনফিগারেশনের রেফারেন্স যেখানে আপডেট করুন।
  5. পরিপাটি :
    • এটি আর প্রয়োজন না হলে কাস্টম অ্যাপ্লিকেশন কনফিগারেশন সরান।
    • যদি অ্যাপ্লিকেশন কনফিগারেশন চলে যায় তবে এটিকে এ থেকে সরাতে ভুলবেন না INSTALLED_APPS

উদাহরণ সমাধান: আমি অ্যাপ-নামকরণ-উদাহরণ তৈরি করেছি , একটি উদাহরণ প্রকল্প যেখানে আপনি দেখতে পাচ্ছেন যে আমি কীভাবে কোনও অ্যাপের নামকরণ করেছি, একসাথে একটি অঙ্গীকার।

উদাহরণটি পাইথন ২.7 এবং জ্যাঙ্গো ১.৮ ব্যবহার করে তবে আমি নিশ্চিত যে একই প্রক্রিয়াটি কমপক্ষে পাইথন ৩.6 এবং জ্যাঙ্গো ২.১ এ কাজ করবে I'm


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

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

@ রোহান এমন কিছু তথ্য আছে যা আপনি মাইগ্রেশন ব্যর্থ হলেন ঠিক কীভাবে বিশদে দিতে পারে?
জাল

আপনি যদি পুরানো মাইগ্রেশন ফাইলগুলির সাথে স্থানীয়ভাবে পরীক্ষা চালান তবে দেখতে পাবেন এটি টেবিলগুলি তৈরি করতে ব্যর্থ হবে @ মেশি
রোহান

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

11

আপনি যদি পাইচার্ম ব্যবহার করছেন এবং প্রকল্পটির নাম পরিবর্তন করার পরে কাজ বন্ধ হয়ে যায়:

  1. চালান / ডিবাগ কনফিগারেশন সম্পাদনা করুন এবং পরিবেশের পরিবর্তনশীল DJANGO_SETTINGS_MODULE পরিবর্তন করুন, কারণ এতে আপনার প্রকল্পের নাম অন্তর্ভুক্ত রয়েছে।
  2. সেটিংস / ভাষা এবং ফ্রেমওয়ার্ক / জ্যাঙ্গোতে যান এবং সেটিংস ফাইলের অবস্থান আপডেট করুন।

1
এটি সেই পরিস্থিতিতে একটি যেখানে আমার সন্ধান ও প্রতিস্থাপন ব্যর্থ হয়েছিল। এই বিষয়টি চিহ্নিত করার জন্য ধন্যবাদ.
ruaanvds

0

ক্লিনার প্লেটের জন্য পুনরায় স্থানান্তর পদ্ধতি approach

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

  1. আপনার ডাটাবেস ব্যাকআপ। সম্ভাব্য বিজ্ঞপ্তি নির্ভরতাগুলির জন্য ডেটা + স্কিমা এবং খ) পুনরায় লোড করার জন্য কেবলমাত্র ডেটা সহ সমস্ত সারণী ডাম্প করুন।
  2. আপনার পরীক্ষা চালান।
  3. ভিসিএসে সমস্ত কোড পরীক্ষা করুন।
  4. নতুন নামকরণের জন্য অ্যাপ্লিকেশনটির ডাটাবেস সারণীগুলি মুছুন।
  5. অনুমতিগুলি মুছুন: delete from auth_permission where content_type_id in (select id from django_content_type where app_label = '<OldAppName>')
  6. সামগ্রীর প্রকারগুলি মুছুন: delete from django_content_type where app_label = '<OldAppName>'
  7. অ্যাপের ফোল্ডারটির নতুন নাম দিন ame
  8. তাদের নির্ভরতা আপনার অ্যাপে কোনো রেফারেন্স পরিবর্তন করুন অর্থাৎ অ্যাপ্লিকেশনের views.py, urls.py'manage.py', এবং settings.pyফাইল।
  9. মাইগ্রেশন মুছুন: delete from django_migrations where app = '<OldAppName>'
  10. যদি আপনার models.pyমেটা ক্লাস app_nameতালিকাভুক্ত করে থাকে তবে সেটিও নাম পরিবর্তন করে নিশ্চিত করুন (@ উইল উল্লেখ করেছেন)।
  11. আপনি যদি নিজের অ্যাপ্লিকেশনের ভিতরে নিজের staticবা templatesফোল্ডারগুলির নাম গতিময় করেন তবে আপনাকে সেগুলি পুনরায় নামকরণও করতে হবে। উদাহরণস্বরূপ, নাম পরিবর্তন old_app/static/old_appকরুন new_app/static/new_app
  12. যদি আপনি অ্যাপ্লিকেশনগুলিতে অ্যাপ্লিকেশন কনফিগারেশন সংজ্ঞায়িত করেন; সেগুলির নাম পরিবর্তন করুন এবং সেটিংসে তাদের উল্লেখগুলি পুনরায় নাম দিন। INSTALLED_APPS
  13. মাইগ্রেশন ফাইলগুলি মুছুন।
  14. পুনরায় মাইগ্রেশন করুন, এবং স্থানান্তর করুন।
  15. ব্যাকআপগুলি থেকে আপনার টেবিলের ডেটা লোড করুন।

0

আপনি ব্যবহার করেন তাহলে Pycharm , একটি অ্যাপ্লিকেশন পুনঃনামকরনের সঙ্গে খুব সহজ refactoring ( Shift+ + F6সব প্রকল্পের ফাইলের জন্য ডিফল্ট)।
তবে নিশ্চিত হয়ে নিন যে আপনি __pycache__প্রকল্প ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলির ফোল্ডারগুলি মুছে ফেলেছেন। এছাড়াও সাবধান থাকুন যেহেতু এটি মন্তব্যেরও নাম পরিবর্তন করে, যা আপনাকে প্রদর্শন করবে এমন রিফ্যাক্টর পূর্বরূপ উইন্ডোতে বাদ দিতে পারে।
এবং আপনাকে ওল্ডনেমকনফিগ (অ্যাপকনফিগ) নামকরণ করতে হবে: এছাড়াও apps.pyআপনার নতুন নামকরণ করা অ্যাপ্লিকেশনটিতে।

আপনি যদি আপনার ডাটাবেসের ডেটা হারাতে না চান, আপনাকে পূর্বোক্ত উত্তরের মতো ডাটাবেসে ক্যোয়ারী সহ ম্যানুয়ালি এটি করতে হবে।


-3

কেন শুধু অনুসন্ধান এবং প্রতিস্থাপন বিকল্পটি ব্যবহার করবেন না। (প্রতিটি কোড সম্পাদক এটি আছে)?

উদাহরণস্বরূপ ভিজ্যুয়াল স্টুডিও কোড (সম্পাদনা বিকল্পের অধীনে):

ভিজ্যুয়াল স্টুডিও কোড বিকল্প: 'ফাইলগুলিতে প্রতিস্থাপন করুন'

আপনি কেবল পুরানো নাম এবং নতুন নাম টাইপ করুন এবং এক ক্লিকের সাহায্যে প্রকল্পের Everyhting প্রতিস্থাপন করুন।

দ্রষ্টব্য : এটি কেবল ফাইল সামগ্রী নয়, ফাইল এবং ফোল্ডারের নাম নয়। ফোল্ডারগুলির নাম পরিবর্তন করতে ভুলবেন না। templates/my_app_name/এটির পুনরায় নামকরণ করুনtemplates/my_app_new_name/

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