मॉडल के मौजूदा ऑब्जेक्ट्स से किसी फ़ील्ड को ले जाने के लिए मैं डिफ़ॉल्ट मान कैसे बना सकता हूं?Django: स्व मॉडल के उदाहरणों से फ़ील्ड का डिफ़ॉल्ट मान
मैं इन की कोशिश की और यह काम किया नहीं किया:
1)
class ModelA(models.Model):
fieldA = models.CharField(default=self.get_previous())
def get_previous(self):
return ModelA.objects.all()[0].fieldA
NameError: name 'self' is not defined
2)
class ModelA(models.Model):
fieldA = models.CharField(default=ModelA.get_previous())
@staticmethod
def get_previous():
return ModelA.objects.all()[0].fieldA
NameError: name 'ModelA' is not defined
3)
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
def get_previous():
return ModelA.objects.all()[0].fieldA
NameError: global name 'get_previous' is not defined
4)
def get_previous():
return ModelA.objects.all()[0].fieldA
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
NameError: global name 'ModelA' is not defined
मैं यह स्पष्ट है क्यों 3) और 4) काम नहीं करेगा। मैं कल्पना कर सकता हूं कि क्यों 1) काम नहीं करेगा - ऐसा लगता है कि वर्ग की प्रस्तुतियां उदाहरण (यानी स्वयं) का संदर्भ नहीं दे सकती हैं। मैं कल्पना कर सकता हूं कि क्यों 2) काम नहीं करेगा - स्पष्ट रूप से मॉडलए का कोई संदर्भ नहीं है जब तक दुभाषिया पूरी कक्षा में नहीं जायेगा।
तो मुझे यह कैसे संपर्क करना चाहिए?
अच्छा बिंदु! मेरे मामले में हालांकि मेरे पास डिफ़ॉल्ट मान पाने के लिए कई फ़ील्ड हैं इसलिए मुझे प्रत्येक के लिए अलग-अलग फ़ंक्शन की आवश्यकता होगी। (लेकिन मैं इसे सामान्य बनाने के लिए लैम्ब्डा का उपयोग करने पर विचार करूंगा, 'लैम्ब्डा: get_default (' field_name ')') – grucha
समतुल्य रूप से, आपको 'डिफ़ॉल्ट = lambda: ModelA.objects.all() [0] करने में सक्षम होना चाहिए। fieldA'। –
ध्यान रखें कि डिफ़ॉल्ट रूप से लैम्ब्डा फ़ंक्शन का उपयोग करके माइग्रेशन के साथ गड़बड़ी होगी क्योंकि लैम्ब्डा फ़ंक्शंस को क्रमबद्ध नहीं किया जा सकता है। – Ironbeard