निम्नलिखित कोड दिया जाता है पूछताछ की उपवर्ग प्राप्त करें:Django मॉडल उपवर्गीकरण: सुपर क्लास
class BaseMedium(models.Model):
title = models.CharField(max_length=40)
slug = models.SlugField()
class A(BaseMedium):
url = models.URLField()
class B(BaseMedium):
email = models.EmailField()
मैं अब हर BaseMedium क्वेरी करना चाहते हैं।
b = BaseMedium.objects.all()
सबक्लास प्रकार के बारे में जानने के बिना सबक्लास फ़ील्ड समेत प्रत्येक जानकारी को मैं कैसे प्रिंट करूं?
b[0].a
जानकारी प्रिंट होता अगर b[0]
वास्तव में एक A
उदाहरण से संबंधित है लेकिन अगर यह B
से संबंधित है यह एक DoesNotExist
अपवाद प्रिंट होगा।
यह समझ में आता है लेकिन मैं एक सामान्य चर या विधि चाहता हूं जो संबंधित वस्तु को वापस कर दे।
शायद मेरा डाटाबेस लेआउट उस तरह से पूछने के लिए वास्तव में बहुत अच्छा नहीं है अगर ऐसा है तो यदि आप बेहतर लेआउट की सिफारिश करेंगे तो मुझे खुशी होगी।
मैं एक GenericForeignKey
class Generic(models.Model):
basemedium = models.ForeignKey('BaseMedium')
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
का उपयोग कर के बारे में सोचा लेकिन इस समाधान जटिल करने के लिए हो रहा है और मुझे लगता है कि तुम लोग बेहतर समाधान है।
आपको इस से सावधान रहना चाहिए। यदि आपके पास डीबी से पुनर्प्राप्त करने के लिए 1000 रिकॉर्ड हैं तो यह एक चयन में किया जाएगा लेकिन फिर प्रत्येक बेसमेडियम ऑब्जेक्ट के लिए उप प्रकार प्राप्त करने के लिए यह 1000 एकल चयन होगा। वैसे भी मुझे बेहतर विचार नहीं पता कि यह कैसे करना है। मैं कुछ सिमिलर का उपयोग करता हूं, जो बहुत से अतिरिक्त डीबी प्रश्नों का उत्पादन करता है ... – dzida
शूट आप सही हैं। कस्टम एसक्यूएल एक विकल्प हो सकता है ... अजीब बात यह है कि मुझे नहीं पता कि यह ज्ञात समाधान के साथ एक आम समस्या नहीं है। – rotrotrot