auto_now
विशेषता सेट वाला कोई भी फ़ील्ड इनहेरिट भी करेगा editable=False
और इसलिए व्यवस्थापक पैनल में दिखाई नहीं देगा। अतीत में तर्क auto_now
और auto_now_add
तर्क को दूर करने के बारे में बात की गई है, और हालांकि वे अभी भी मौजूद हैं, मुझे लगता है कि आप कस्टम save()
पद्धति का उपयोग करके बेहतर हैं ।
इसलिए, इस काम को ठीक से करने के लिए, मैं अनुशंसा करता हूं कि आप इसका उपयोग न करें auto_now
या auto_now_add
इसके बजाय अपने save()
तरीके को परिभाषित करें, जो कि created
केवल तभी अपडेट किया id
जाता है जब सेट नहीं किया जाता है (जैसे कि आइटम पहली बार बनाया गया है), और क्या यह modified
हर बार अपडेट होता है आइटम बच जाता है।
मैंने अन्य प्रोजेक्ट्स के साथ ठीक वही काम किया है जो मैंने Django का उपयोग करके लिखा है, और इसलिए आपका save()
ऐसा दिखेगा:
from django.utils import timezone
class User(models.Model):
created = models.DateTimeField(editable=False)
modified = models.DateTimeField()
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not self.id:
self.created = timezone.now()
self.modified = timezone.now()
return super(User, self).save(*args, **kwargs)
उम्मीद है की यह मदद करेगा!
टिप्पणियों के जवाब में संपादित करें:
कारण है कि मैं सिर्फ save()
इन क्षेत्रों के तर्कों पर भरोसा करते हुए ओवरलोडिंग के साथ चिपक जाता हूं , दो गुना है:
- उपर्युक्त उतार-चढ़ाव उनकी विश्वसनीयता के साथ। ये तर्क प्रत्येक प्रकार के डेटाबेस पर बहुत अधिक निर्भर हैं जो कि Django जानता है कि किसी दिनांक / समय स्टैम्प फ़ील्ड के साथ कैसे व्यवहार किया जाए, और हर रिलीज़ के बीच टूटने और / या बदलने के लिए लगता है। (जो मुझे लगता है कि उन्हें पूरी तरह से हटाने के लिए कॉल के पीछे प्रेरणा है)।
- तथ्य यह है कि वे केवल DateField, DateTimeField और TimeField पर काम करते हैं, और इस तकनीक का उपयोग करके आप किसी भी आइटम को सहेजे जाने पर किसी भी फ़ील्ड प्रकार को स्वचालित रूप से पॉप्युलेट करने में सक्षम होते हैं।
django.utils.timezone.now()
बनाम का उपयोग करें datetime.datetime.now()
, क्योंकि यह एक TZ- जागरूक या अनुभवहीन datetime.datetime
वस्तु पर निर्भर करेगा settings.USE_TZ
।
यह पता करने के लिए कि ओपी ने त्रुटि क्यों देखी, मुझे ठीक से पता नहीं है, लेकिन ऐसा लगता created
है कि होने के बावजूद भी बिल्कुल भी आबादी नहीं है auto_now_add=True
। मेरे लिए यह एक बग के रूप में बाहर खड़ा है, और ऊपर मेरी छोटी सूची में # 1 आइटम को रेखांकित करता है: auto_now
और auto_now_add
सबसे अच्छे रूप में परतदार हैं।