के लिए auto_now ओवरराइट करें मैंने डेटाबेस में auto_now_add
के रूप में डेटाबेस के लिए कुछ टाइमस्टैम्प परिभाषित किए हैं, क्योंकि जानकारी को संग्रहीत किया जाता है, उसी समय जानकारी के समय के साथ संग्रहीत किया जाना चाहिए।unittest
घटनाओं का विवरण, इस तरह से
class NewEvent(models.Model):
'''
Individual event
'''
name = models.CharField(max_length=100)
quantity = models.FloatField(null=True)
timestamp = models.DateTimeField(auto_now_add=True)
की तरह कुछ मॉड्यूल का परीक्षण करने के लिए, मैं test.py
फ़ाइल में डेटाबेस में कुछ जानकारी पैदा कर रहा हूँ है:
for event in EVENT_TYPES:
time = datetime.datetime.now() - datetime.timedelta(days=1)
for i in range(48):
time = time.replace(hour=i/2)
NewEvent(name=event,
timestamp=time,
quantity=i).save()
मैं चाहिए कल के अपने टाइमस्टैम्प के साथ घटनाएं उत्पन्न करें (मॉड्यूल फिर उन्हें सारांशित करेगा)। समस्या यह है कि आप टाइमस्टैम्प को ओवरराइट नहीं कर सकते हैं। टाइमस्टैंप यह तब होता है जब यह उत्पन्न होता है, documentation बताता है कि यह स्पष्ट रूप से है।
तो, परीक्षण के लिए एप्रोपिएट टाइमस्टैम्प के साथ डेटा कैसे उत्पन्न करें? मेरे पास कई विचार हैं:
- शायद मॉडल कक्षाओं के बाहर डेटाबेस डेटा को अलग-अलग तरीके से उत्पन्न करें। कहां और कैसे?
- किसी तरह एक अलग वर्ग को परिभाषित या परीक्षण के दौरान वर्ग व्यवहार करने के लिए बदलने के अलग ढंग से,
की तरह कुछ _
if testing:
timestamp = models.DateTimeField(auto_now_add=True)
else:
timestamp = models.DateTimeField(auto_now_add=False)
या हो सकता है कि इस ... कोई भी विचार करने के लिए एक और भी आसान रास्ता नहीं है?
सरलीकरण के रूप में 'timestamp = models.DateTimeField (auto_now_add = परीक्षण) 'के बारे में कैसे? परीक्षण के बाद –
'परीक्षण' चर सही होगा? यह बहुत अच्छा होगा, लेकिन इस मामले में, यह 'auto_now_add = परीक्षण नहीं' जैसा होना चाहिए, मुझे लगता है ... – Khelben
यह आपका प्रश्न और आपका उदाहरण है, इसे ठीक करने में संकोच न करें। गतिशील विकल्प के लिए –