मेरे पास ये दो मॉडल हैं:
class User(AbstractUser):
pass
class Listing(models.Model):
listing_id = models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')
title = models.CharField(max_length=64)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="listing")
मैं उपयोगकर्ता मॉडल में निम्नलिखित करना चाहता हूं:
class User(AbstractUser):
listing = models.ForeignKey(Listing, on_delete=models.CASCADE)
लेकिन मुझे निम्न त्रुटि मिल रही है: NameError: name 'Listing' is not defined
क्या अमूर्त उपयोगकर्ता के लिए एक विदेशी कुंजी जोड़ना संभव है?
2 जवाब
चूंकि आपने User
पहले Listing
को परिभाषित किया है, इसलिए नाम अभी तक परिभाषित नहीं है। हालांकि यह Django के लिए कोई समस्या नहीं है क्योंकि आप स्ट्रिंग अक्षर का भी उपयोग कर सकते हैं:
class User(AbstractUser):
listing = models.ForeignKey('Listing', on_delete=models.CASCADE)
class Listing(models.Model):
listing_id = models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name='ID'
)
title = models.CharField(max_length=64)
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='listing'
)
हालांकि आप यहां listing
नाम के साथ ForeignKey
को परिभाषित नहीं कर सकते, क्योंकि आपके Listing
मॉडल में related_name='listing'
के साथ पहले से ही एक ForeignKey
है। इस प्रकार यह एक त्रुटि का परिणाम होगा। इस प्रकार आपको या तो related_name
को बदलना चाहिए, या listing
का नाम User
मॉडल में बदलना चाहिए।
उन मुद्दों से बचने के लिए मॉडल नाम को एक स्ट्रिंग के रूप में पास करें जहाँ आप एक ऐसे मॉडल का संदर्भ देना चाहते हैं जो अभी तक परिभाषित नहीं है
class User(AbstractUser):
listing = models.ForeignKey('Listing', on_delete=models.CASCADE)
आप ऐप नाम जोड़कर किसी अन्य ऐप में किसी मॉडल को संदर्भित करने के लिए उसी विधि का उपयोग कर सकते हैं
listing = models.ForeignKey('app.Listing', on_delete=models.CASCADE)
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।