2011-11-04 27 views
57

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

उत्तर

89

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

created = models.DateTimeField(auto_now_add=True) 

तुम भी एक क्षेत्र 'पर अद्यतन' के लिए auto_now उपयोग कर सकते हैं। उनके व्यवहार की जांच करें in the doc

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

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

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

मैं एक सार आधार वर्ग का निर्माण और सभी मॉडलों यह से विरासत अगर आप टाइमस्टैम्प/FIELDNAME के ​​बारे में भूल नहीं करना चाहते हैं, आदि

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

    class Meta: 
     abstract = True 

यह आयात करने के लिए बहुत पसंद नहीं लगता है django.db.models.Model

class MyFutureModels(TimeStampedModel): 
    .... 
+1

Django के लिए 'model_utils' भी है जिसमें पहले से ही 'टाइमस्टैम्पड मॉडल' है, लेकिन अगर आपको इस पैकेज से कुछ और चाहिए तो बस इसे अतिरिक्त वजन रखें। – boldnik

+0

@ बोल्डनिक मैं सादगी का प्रशंसक हूं। –

13

के बजाय wherever.TimeStampedModel आप django-extensions उपयोग कर रहे हैं ओ आप their TimeStampedModel से इनहेरिट से मुक्त करने के लिए इन मॉडल क्षेत्रों प्राप्त कर सकते हैं (जो django-admin.py कमांड लाइन सहायक के लिए कार्यक्षमता जोड़ने के लिए एक अच्छा अनुप्रयोग है) आर का उपयोग कर अपने custom TimeStamp fields

3

आप कोशिश कर सकते हैं django-extensions

आप उपयोग करना समय स्टाम्प सार मॉडल

from django_extensions.db.models import TimeStampedModel 

class A(TimeStampedModel): 
    ... 

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

संबंधित मुद्दे