জ্যাঙ্গোর এক অ্যাপ্লিকেশন থেকে অন্য অ্যাপ্লিকেশনে বিদেশী কী


101

আমি ভাবছি যে জ্যাঙ্গোর মডেল.পি ফাইলে কোনও বিদেশী কী সংজ্ঞায়িত করা সম্ভব যা অন্য অ্যাপ্লিকেশনটির কোনও টেবিলের রেফারেন্স?

অন্য কথায়, আমার কাছে দুটি অ্যাপ রয়েছে যার নাম সিএফ এবং প্রোফাইলগুলি এবং সিএফ / মডেল.পি-তে আমার রয়েছে (অন্যান্য জিনিসের মধ্যে):

class Movie(models.Model):
    title = models.CharField(max_length=255)

এবং প্রোফাইলে / মডেলগুলিতে I

class MovieProperty(models.Model):
    movie = models.ForeignKey(Movie)

কিন্তু আমি এটি কাজ করতে পারি না। আমি চেষ্টা করেছিলাম:

    movie = models.ForeignKey(cf.Movie)

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

NameError: name 'User' is not defined

আমি কি এইভাবে দুটি অ্যাপ্লিকেশন একসাথে বেঁধে দেওয়ার চেষ্টা করে নিয়মগুলি ভঙ্গ করছি, অথবা আমি কী সিনট্যাক্সটি ভুল পেয়েছি?

উত্তর:


157

দস্তাবেজ অনুসারে, আপনার দ্বিতীয় চেষ্টাটি কাজ করা উচিত:

অন্য অ্যাপ্লিকেশনে সংজ্ঞায়িত মডেলগুলি উল্লেখ করতে আপনাকে অবশ্যই স্পষ্টভাবে অ্যাপ্লিকেশন লেবেল নির্দিষ্ট করতে হবে। উদাহরণস্বরূপ, যদি উপরের উত্পাদনকারী মডেলটিকে উত্পাদিত নামক অন্য অ্যাপ্লিকেশনটিতে সংজ্ঞায়িত করা হয় তবে আপনার ব্যবহার করতে হবে:

class Car(models.Model):
    manufacturer = models.ForeignKey('production.Manufacturer')

আপনি কি এটাকে উদ্ধৃতি দেওয়ার চেষ্টা করেছেন?


4
প্রাসঙ্গিক ডক্সটি এখানে
নাথান জোন্স

অনেক অ্যাপ্লিকেশন জুড়ে বিদেশী কী থাকা কি ঠিক আছে? আমি একটি প্রকল্পের মধ্যে অনেকগুলি অ্যাপ্লিকেশন জুড়ে বহু বিদেশী কী সহ অনেকগুলি অ্যাপ্লিকেশন করছি। fyi, আমি ইতিমধ্যে প্রশ্ন শুরু করেছি তবে উত্তরগুলির জন্য অপেক্ষা করছি। stackoverflow.com/questions/55213918/…
তিয়ান লুন

দেরীতে, আমি জানি, তবে এটি বেশিরভাগই পছন্দ এবং সংস্থার বিষয়। আমার কাছে "অভ্যন্তরীণ" অ্যাপ্লিকেশন রয়েছে যা কখনই বাহ্যিক ব্যবহারের উদ্দেশ্যে নয়। এগুলি একে অপরের উপর নির্ভর করতে পারে এবং প্রধানত আমাকে আমার ফাইল এবং নাম স্থানের একটি সুবিধাজনক সংগঠন দেওয়ার জন্য উপস্থিত থাকতে পারে। বাহ্যিক অ্যাপ্লিকেশন (যেমন জ্যাঙ্গোপ্যাকেজগুলি থেকে) এবং অ্যাপ্লিকেশনগুলি যেগুলি আমি একদিন জনসাধারণের জন্য অবদান রাখতে পারি, এগুলিকে যথাসম্ভব নির্ভরতা মুক্ত রাখতে হবে (যদিও কিছু অন্যান্য সমর্থিত পাবলিক-ডোমেন অ্যাপের উপর নির্ভরতা ঠিক আছে। জনসাধারণের সাথে সম্পর্কিত অ্যাপ্লিকেশনগুলি জ্যাঙ্গোর ব্যবহারকারী / গোষ্ঠী / অনুমতি মডেলগুলির উপর নির্ভর করে)।
নিগেল 222

ধন্যবাদ, এটি আমার পক্ষে কাজ করেছে। উদ্ধৃতি যোগ করে, আমাদের ক্লাসটি আমদানি করার দরকার নেই। তবে আমি অবাক হই যে, যদি আমরা ক্লাসটি আমদানির সিদ্ধান্ত নিই, তবে @andorov দ্বারা প্রদত্ত অন্যান্য দুর্দান্ত উদাহরণের মতো কোনও পার্থক্য রয়েছে কিনা?
মিশেল মেসকিটা

27

ক্লাস নিজেই পাস করাও সম্ভব:

from django.db import models
from production import models as production_models

class Car(models.Model):
    manufacturer = models.ForeignKey(production_models.Manufacturer)

10

ঠিক আছে - আমি এটি বের করেছি। আপনি এটি করতে পারেন, আপনাকে কেবল সঠিক importবাক্য গঠন ব্যবহার করতে হবে । সঠিক বাক্য গঠনটি হ'ল:

from prototype.cf.models import Movie

আমার ভুলটি .modelsসেই লাইনের অংশটি নির্দিষ্ট করে নি । ডিওহ!


11
কখনও কখনও আপনাকে উদ্ধৃতিগুলি ব্যবহার করতে হবে এবং আমদানি নয়, কারণ আপনি একে অপরকে আমদানি করার ফাইলগুলি পেতে পারেন।
স্যাম স্টোলেঙ্গা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.