सेट किया गया है मैं निम्नलिखित मॉडल है:Django: जाँच करें कि विदेशी प्रमुख विशेषता
class A(models.Model):
name = models.CharField(max_length=50)
content_type = models.ForeignKey(ContentType)
यह मॉडल कुछ विरासत पेड़ और content_type विशेषता में जड़ मॉडल माना जाता है कि किस प्रकार के बारे में एक संकेत की तरह है वास्तव में संग्रहीत है। जाहिर है, मुझे एक उदाहरण निर्माण पर पारदर्शी रूप से content_type
की गणना करनी चाहिए। मुझे लगता है, __init__
में। लेकिन वहाँ एक समस्या है - वहाँ दो मुख्य संदर्भों जिसमें एक उदाहरणों बनाई गई हैं कर रहे हैं:
QuerySet
मशीनरी
a = A(name='asdfdf') # here we must fill in content_type
*args
टपल साथ।def __init__(self, *args, **kwargs): super(A, self).__init__(*args, **kwargs) if self.content_type is None: # << here is the problem self.content_type = ContentType.objects.get_for_model(self)
बात
self.content_type
है ओवरराइड__get__
साथReverseSingleRelatedObjectDescriptor
उदाहरण है इतना है कि यह फेंकता में मामला मूल्य है: इस मामले में मैंcontent_type
तो में भरने नहीं करना चाहिए, मैं लिखने के लिए कोशिश कर रहा हूँ सेट नहीं। हां, मैं निम्नलिखित कर सकता हूं:
def __init__(self, *args, **kwargs):
super(A, self).__init__(*args, **kwargs)
try:
self.content_type
except Exception, v:
self.content_type = ContentType.objects.get_for_model(self)
लेकिन मुझे यह पसंद नहीं है। क्या ForeignKey
विशेषता सेट है या नहीं, यह जांचने के लिए कोई और 'विनम्र' तरीका है?
सबसे पहले, यदि आप 'content_type' वैकल्पिक होना चाहते हैं, तो मुझे लगता है कि आपको अपनी फ़ील्ड परिभाषा पर 'blank = True, null = True' सेट करना होगा। –
मैं यह वैकल्पिक नहीं होना चाहता, मैं सिर्फ अपने मूल्य को सेट नहीं करना चाहता हूं अगर यह पहले से ही Django (डीबी से पढ़ने की प्रक्रिया में) द्वारा निर्धारित किया गया है। –