Django में मॉडल में एक डिफ़ॉल्ट टाइमस्टैम्प फ़ील्ड है?


90

Django में - क्या सभी वस्तुओं के लिए एक डिफ़ॉल्ट टाइमस्टैम्प क्षेत्र है? यही है, क्या मुझे अपने मॉडल में 'निर्मित' के लिए 'टाइमस्टैम्प' क्षेत्र को स्पष्ट रूप से घोषित करना होगा - या क्या यह स्वचालित रूप से प्राप्त करने का एक तरीका है?

जवाबों:


175

डिफ़ॉल्ट रूप से ऐसी कोई बात नहीं है, लेकिन एक को जोड़ना सुपर आसान है। बस कक्षा auto_now_addमें पैरामीटर का उपयोग करें DateTimeField:

created = models.DateTimeField(auto_now_add=True)

आप auto_now'अपडेटेड' फ़ील्ड के लिए भी उपयोग कर सकते हैं । auto_now यहाँ के व्यवहार की जाँच करें

के लिए auto_now_add यहाँ

इस तरह दोनों क्षेत्रों के साथ एक मॉडल दिखेगा:

class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

32

स्वचालित रूप से ध्वनि नहीं होती है जैसे कि कुछ django डिफ़ॉल्ट रूप से करेगा। यह आपको टाइमस्टैम्प की आवश्यकता के लिए मजबूर नहीं करेगा।

यदि आप टाइमस्टैम्प / फ़ील्डनाम, आदि के बारे में भूलना नहीं चाहते हैं, तो मैं एक सार बेस क्लास बनाऊंगा और उसमें से सभी मॉडल इनहेरिट करूँगा।

class TimeStampedModel(models.Model):
     created_on = models.DateTimeField(auto_now_add=True)

     class Meta:
         abstract = True

इसके wherever.TimeStampedModelबजाय आयात करने के लिए ऐसा प्रतीत नहीं होता हैdjango.db.models.Model

class MyFutureModels(TimeStampedModel):
    ....

2
model_utilsDjango के लिए भी है जिसमें पहले से ही शामिल है TimeStampedModel, लेकिन अगर आपको इस पैकेज से कुछ और की आवश्यकता नहीं है, तो बस w / o अतिरिक्त वजन रखें।
बोल्डनिक

@boldnik मैं सादगी का प्रशंसक हूं।
युजी 'टमिता' टमिता

बहुत अच्छा ... मेरे पास 3 कक्षाएं हैं जिनके लिए टाइमस्टैम्प की आवश्यकता है createdऔर updated। यह सफाई से करने का एक शानदार तरीका है।
ron_g

13

यदि आप django- एक्सटेंशन (जो django-admin.py कमांड लाइन हेल्पर के लिए कार्यक्षमता जोड़ने के लिए एक अच्छा ऐप है) का उपयोग कर रहे हैं, तो आप इन मॉडल फ़ील्ड को उनके TimeStampedModel से विरासत में प्राप्त करके या अपने कस्टम डेटा स्टैम्प फ़ील्ड का उपयोग करके मुफ्त में प्राप्त कर सकते हैं


5

आप django- एक्सटेंशन की कोशिश कर सकते हैं

यदि आप समय-स्टैम्प सार मॉडल का उपयोग करना चाहते हैं

from django_extensions.db.models import TimeStampedModel

class A(TimeStampedModel):
   ...

इसके अन्य सार मॉडल हैं। आप उसका भी उपयोग कर सकते हैं।


2

यदि आप इस फ़ील्ड को संशोधित करने में सक्षम होना चाहते हैं, तो इसके बजाय निम्नलिखित सेट करें auto_now_add=True:

दिनांक के लिए

from datetime import date

models.DateField(default=date.today)

दिनांक समय के लिए

from django.utils import timezone

models.DateTimeField(default=timezone.now)

0

मुझे लगता है कि मैं साथ जाऊंगा

created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)

मुझे उपयोग करने पर कुछ स्पष्टीकरण की आवश्यकता है

class TimeStampedModel(models.Model):
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
         abstract = True
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.