दिलचस्प पोस्ट
हैशकोड और हाशसेट के लिए बराबर ऐप बंद होने पर एंड्रॉइड सर्विस बंद हो जाती है php: पकड़ अपवाद और निष्पादन जारी है, यह संभव है? क्या मैं आईफ़ोन या एंड्रॉइड पर HTML5 के साथ मूल फ़ुलस्क्रीन वीडियो प्लेयर से बच सकता हूं? PHP और एचटीएमएल का उपयोग करते समय उपयोग करने के लिए सबसे अच्छा अभ्यास क्या है? आईओएस सिम्युलेटर गेम्स बहुत धीमे (कम एफपीएस) चलाते हैं सी # में छवियों की एसआरसी पाने के लिए नियमित अभिव्यक्ति HTML में यूनिकोड प्रतीकों को प्रदर्शित करना वर्ग चर और वर्ग उदाहरण चर के बीच अंतर? कैसे सी # में खींचें और आकृतियों को खींचें एक दृश्य में सभी EditTexts प्राप्त करने की विधि कैसे एक ही फैशन में दो ArrayLists यादृच्छिक? संदर्भ: PHP के प्रिंट और इको की तुलना करें घटना भेजने से पहले रिक्त की जांच हो रही है … थ्रेड सुरक्षित है? क्वेरी स्ट्रिंग के लिए htaccess पुनर्लेखन

फ़ंक्शन कॉल / कॉल करने योग्य (जैसे, मॉडल ऑब्जेक्ट निर्माण के समय के संबंध में एक तिथि) एक Django मॉडल फ़ील्ड का डिफ़ॉल्ट मान कैसे सेट करें

संपादित:

मैं किसी फ़ंक्शंस पर एक डीजेंगो फ़ील्ड की डिफ़ॉल्ट कैसे सेट कर सकता हूं जो हर बार एक नया मॉडल ऑब्जेक्ट तैयार हो जाता है?

मैं निम्नलिखित की तरह कुछ करना चाहता हूं, सिवाय इसके कि इस कोड में, कोड को एक बार मूल्यांकन किया जाता है और प्रत्येक मॉडल ऑब्जेक्ट के लिए उसी तिथि तक डिफ़ॉल्ट सेट करता है, हर बार कोई मॉडल ऑब्जेक्ट बनाया जाता है, तो कोड का मूल्यांकन करने के बजाय:

from datetime import datetime, timedelta class MyModel(models.Model): # default to 1 day from now my_date = models.DateTimeField(default=datetime.now() + timedelta(days=1)) 

मूल:

मैं फ़ंक्शन पैरामीटर के लिए एक डिफ़ॉल्ट मान बनाना चाहता हूं, जैसे कि यह गतिशील है और फ़ंक्शन को कहने पर प्रत्येक बार कॉल किया जाता है और सेट करता है। मैं उसे कैसे कर सकता हूँ? जैसे,

 from datetime import datetime def mydate(date=datetime.now()): print date mydate() mydate() # prints the same thing as the previous call; but I want it to be a newer value 

विशेष रूप से, मैं इसे Django में करना चाहता हूँ, जैसे,

 from datetime import datetime, timedelta class MyModel(models.Model): # default to 1 day from now my_date = models.DateTimeField(default=datetime.now() + timedelta(days=1)) 

Solutions Collecting From Web of "फ़ंक्शन कॉल / कॉल करने योग्य (जैसे, मॉडल ऑब्जेक्ट निर्माण के समय के संबंध में एक तिथि) एक Django मॉडल फ़ील्ड का डिफ़ॉल्ट मान कैसे सेट करें"

प्रश्न गुमराह किया गया है। Django में एक मॉडल फ़ील्ड बनाते समय, आप किसी फ़ंक्शन को परिभाषित नहीं कर रहे हैं, इसलिए फ़ंक्शन डिफ़ॉल्ट मान अप्रासंगिक हैं:

 from datetime import datetime, timedelta class MyModel(models.Model): # default to 1 day from now my_date = models.DateTimeField(default=datetime.now() + timedelta(days=1)) 

यह अंतिम पंक्ति किसी फ़ंक्शन को परिभाषित नहीं करती है; यह कक्षा में फ़ील्ड बनाने के लिए एक फ़ंक्शन को लागू कर रहा है।

प्री Django 1.7

Django आपको कॉल करने योग्य को डिफ़ॉल्ट के रूप में पास करने देता है , और यह हर बार इसे लागू करेगा, जैसे आप चाहते हैं:

 from datetime import datetime, timedelta class MyModel(models.Model): # default to 1 day from now my_date = models.DateTimeField(default=lambda: datetime.now() + timedelta(days=1)) 

Django 1.7+

कृपया ध्यान दें कि डिफ़ॉल्ट रूप से Django 1.7, लैम्ब्डा का उपयोग अनुशंसित नहीं है (सीएफ @stvnw टिप्पणी)। ऐसा करने का उचित तरीका फ़ील्ड से पहले एक फ़ंक्शन घोषित करना है और इसे default_value नामक एआरजेबल में कॉल करने योग्य के रूप में उपयोग किया जाता है:

 from datetime import datetime, timedelta # default to 1 day from now def get_default_my_date(): return datetime.now() + timedelta(days=1) class MyModel(models.Model): my_date = models.DateTimeField(default=get_default_my_date) 

@simanas में अधिक जानकारी के नीचे का जवाब

यह default=datetime.now()+timedelta(days=1) करना default=datetime.now()+timedelta(days=1) बिल्कुल गलत है!

जब आप डीजेंगो का अपना उदाहरण प्रारंभ करते हैं तो इसका मूल्यांकन किया जाता है यदि आप अपाचे के तहत हैं तो शायद यह काम करेगा, क्योंकि कुछ कॉन्फ़िगरेशन एपाचे पर आपके अनुरोध पर प्रत्येक डीजेंगो आवेदन को रद्द कर दिया जाता है, लेकिन फिर भी आप अपना कोड देखकर कुछ दिन खुद को ढूंढ सकते हैं और यह समझने की कोशिश कर रहे हैं कि आपको इसकी उम्मीद क्यों नहीं की जाती है ।

ऐसा करने का सही तरीका एक तर्कसंगत ऑब्जेक्ट डिफ़ॉल्ट तर्क को पास करना है। यह एक datetime.today फ़ंक्शन या आपके कस्टम फ़ंक्शन हो सकता है। फिर हर बार जब आप एक नया डिफ़ॉल्ट मान का अनुरोध करते हैं तो इसका मूल्यांकन किया जाता है।

 def get_deadline(): return datetime.today() + timedelta(days=20) class Bill(models.Model): name = models.CharField(max_length=50) customer = models.ForeignKey(User, related_name='bills') date = models.DateField(default=datetime.today) deadline = models.DateField(default=get_deadline) 

निम्नलिखित दो डेटटाइमफिल्ड कंट्रोलर्स के बीच एक महत्वपूर्ण अंतर है:

 my_date = models.DateTimeField(auto_now=True) my_date = models.DateTimeField(auto_now_add=True) 

यदि आप auto_now_add=True उपयोग करते हैं, तो my_date द्वारा संदर्भित datetime "अपरिवर्तनीय" है (केवल एक बार सेट होता है जब पंक्ति को तालिका में डाला जाता है)।

auto_now=True , हालांकि, प्रत्येक बार ऑब्जेक्ट को सहेजने के लिए, auto_now=True वैल्यू अद्यतन किया जाएगा।

यह निश्चित रूप से मेरे लिए एक बिंदु पर मिला था। संदर्भ के लिए, दस्तावेज़ यहां हैं:

https://docs.djangoproject.com/en/dev/ref/models/fields/#datetimefield

आप सीधे नहीं कर सकते; फ़ंक्शन परिभाषा का मूल्यांकन किया जाने पर डिफ़ॉल्ट मान का मूल्यांकन किया जाता है। लेकिन इसके चारों ओर दो तरीके हैं

सबसे पहले, आप हर बार एक नया फ़ंक्शन बना सकते हैं (और फिर कॉल कर सकते हैं)

या, अधिक बस, डिफ़ॉल्ट को चिह्नित करने के लिए बस एक विशेष मान का उपयोग करें उदाहरण के लिए:

 from datetime import datetime def mydate(date=None): if date is None: date = datetime.now() print date 

अगर None पूरी तरह से उचित पैरामीटर मान नहीं है, और इसके अलावा अन्य कोई उचित मूल्य नहीं है जो आप इसके स्थान पर इस्तेमाल कर सकते हैं, तो आप केवल एक नया मान बना सकते हैं जो निश्चित रूप से आपके फ़ंक्शन के डोमेन के बाहर है:

 from datetime import datetime class _MyDateDummyDefault(object): pass def mydate(date=_MyDateDummyDefault): if date is _MyDateDummyDefault: date = datetime.now() print date del _MyDateDummyDefault 

कुछ दुर्लभ मामलों में, आप मेटा-कोड लिख रहे हैं जो वास्तव में बिल्कुल कुछ भी लेने में सक्षम होने की आवश्यकता है, यहां तक ​​कि, कहते हैं, mydate.func_defaults[0] । उस स्थिति में, आपको ऐसा कुछ करना होगा:

 def mydate(*args, **kw): if 'date' in kw: date = kw['date'] elif len(args): date = args[0] else: date = datetime.now() print date 

फ़ंक्शन कॉल के परिणाम में पारित करने के बजाय फ़ंक्शन को एक पैरामीटर के रूप में पास करें।

यही है, इसके बजाय:

 def myfunc(date=datetime.now()): print date 

इसे इस्तेमाल करे:

 def myfunc(date=datetime.now): print date()