Django में एक ऐप से दूसरे में विदेशी कुंजी


94

मैं सोच रहा था कि क्या Django में किसी मॉडल की फ़ाइल में एक विदेशी कुंजी को परिभाषित करना संभव है जो किसी अन्य ऐप में एक टेबल का संदर्भ है?

दूसरे शब्दों में, मेरे पास दो ऐप्स हैं, जिन्हें cf और प्रोफाइल कहा जाता है, और cf / model.py में मेरे पास (अन्य बातों के अलावा):

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

और प्रोफाइल / मॉडल ओरेकल में मेरे पास है:

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

लेकिन मैं इसे काम नहीं कर सकता। मैंने कोशिश की:

    movie = models.ForeignKey(cf.Movie)

और मैंने मॉडल की शुरुआत में cf.Movie आयात करने की कोशिश की है, लेकिन मुझे हमेशा त्रुटियाँ मिलती हैं, जैसे:

NameError: name 'User' is not defined

क्या मैं इस तरह से दो ऐप को एक साथ जोड़ने की कोशिश करके नियमों को तोड़ रहा हूं, या क्या मुझे सिंटेक्स गलत मिला है?

जवाबों:


150

डॉक्स के अनुसार, आपका दूसरा प्रयास काम करना चाहिए:

किसी अन्य एप्लिकेशन में परिभाषित मॉडल का उल्लेख करने के लिए, आपको इसके बजाय स्पष्ट रूप से एप्लिकेशन लेबल को निर्दिष्ट करना होगा। उदाहरण के लिए, यदि ऊपर दिए गए निर्माता मॉडल को उत्पादन नामक एक अन्य एप्लिकेशन में परिभाषित किया गया है, तो आपको उपयोग करने की आवश्यकता होगी:

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

क्या आपने इसे उद्धरणों में डालने की कोशिश की है?


1
प्रासंगिक डॉक्स यहां
नाथन जोन्स

क्या कई ऐप्स में विदेशी कुंजी होना ठीक है? मैं एक परियोजना कर रहा हूँ एक परियोजना के भीतर कई क्षुधा भर में कई विदेशी कुंजी के साथ कई क्षुधा है। फी, मैंने पहले ही सवाल शुरू कर दिया है, लेकिन जवाब का इंतजार कर रहा हूं। stackoverflow.com/questions/55213918/…
तियान लूऑन

देर से, मुझे पता है, लेकिन यह ज्यादातर पसंद और संगठन का मामला है। मेरे पास "आंतरिक" ऐप्स हैं जो कभी बाहरी उपयोग के लिए अभिप्रेत नहीं हैं। वे एक दूसरे पर निर्भर हो सकते हैं और मुख्य रूप से मुझे अपनी फ़ाइलों और नामस्थानों का एक सुविधाजनक संगठन देने के लिए मौजूद हैं। बाहरी ऐप्स (जैसे कि DjangoPackages से) और ऐसे ऐप्स जिन्हें मैं एक दिन जनता के लिए योगदान दे सकता हूं, उन्हें यथासंभव निर्भरता से मुक्त रखने की आवश्यकता है (हालांकि कुछ अन्य समर्थित सार्वजनिक डोमेन ऐप पर निर्भरता ठीक हो सकती है। सार्वजनिक उपयोगकर्ता-संबंधित ऐप्स Django के उपयोगकर्ता / समूह / अनुमति मॉडल पर निर्भर करते हैं)।
nigel222

23

कक्षा को पास करना भी संभव है:

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

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

9

ठीक है - मुझे लगा है। आप इसे कर सकते हैं, आपको बस सही importसिंटैक्स का उपयोग करना होगा । सही सिंटैक्स है:

from prototype.cf.models import Movie

मेरी गलती .modelsउस लाइन के हिस्से को निर्दिष्ट नहीं कर रही थी। डी 'ओह!


10
कभी-कभी आपको उद्धरण का उपयोग करना पड़ता है और आयात नहीं करना पड़ता है, क्योंकि आपको एक दूसरे को आयात करने वाली फाइलें मिल सकती हैं।
सैम स्टोइलिंगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.