2015-08-20 11 views
6

खो देता है Django 1.8 में, हम कहते हैं कि हम इस बहुत ही सरल मॉडल है करते हैं:की बचत मॉडल उदाहरण माइक्रोसेकंड संकल्प

class Log(models.Model): 
    remarks = models.TextField() 
    timestamp = models.DateTimeField(default=timezone.now) 

जब मैं अपने PostgreSQL डेटाबेस के लिए एक मॉडल के उदाहरण बचाने के लिए, timestamp क्षेत्र होगा microseconds है। मैंने देखा कि यदि मैं Django व्यवस्थापक से किसी विशेष मॉडल उदाहरण को संपादित करने का प्रयास करता हूं, तो timestamp फ़ील्ड डेटाबेस में वापस सहेजे जाने पर माइक्रोसेकंड रिज़ॉल्यूशन खो देगा।

अधिकांश एप्लिकेशन को सटीकता के उस स्तर की आवश्यकता नहीं होगी, लेकिन ऐसे अनुप्रयोगों के लिए, जो संकल्प के इस नुकसान के सभी संभावित कारणों को खत्म करने में सक्षम होना अच्छा होगा। क्या इसे रोकने के लिए कोई ज्ञात तरीका/सुविधा है या यह एक बग/सीमा है?

+2

जो डीबी आप उपयोग कर रहे हैं? – svfat

+0

@ अलास्डेयर - हाँ, यह मेरे अंत से एक टाइपो था। मेरा बुरा और धन्यवाद! @ एसवीएफएटी - पोस्टग्रेएसक्यूएल। मुझे यह भी पता है कि MySQL माइक्रोसॉन्ड रिज़ॉल्यूशन का समर्थन नहीं करता है, लेकिन यहां तथ्य यह है कि जब आप Django Admin से मॉडल उदाहरण अपडेट करते हैं तो 'टाइमस्टैम्प' फ़ील्ड माइक्रोसेकंड रिज़ॉल्यूशन खो देता है। –

+1

एक तरफ के रूप में, Django 1.8 और MySQL 5.6.4+ microseconds ([रिलीज नोट्स] (https://docs.djangoproject.com/en/1.8/releases/1.8/#database-backends) का समर्थन करते हैं) – Alasdair

उत्तर

5

समस्या यह है कि डिफ़ॉल्ट व्यवस्थापक विजेट microseconds का समर्थन नहीं करता है। आप के साथ DateTimeInput का उपयोग करने के लिए विजेट को ओवरराइड कर सकते हैं, और एक प्रारूप निर्दिष्ट करें जिसमें माइक्रोसेकंड शामिल हैं।

from django.contrib import admin 
from django.db import models 
from django import forms 

from .models import Log 

class LogAdmin(admin.ModelAdmin): 

    formfield_overrides = { 
     models.DateTimeField: {'widget': forms.DateTimeInput(format='%Y-%m-%d %H:%M:%S.%f')}, 
    } 

admin.site.register(Log, LogAdmin) 

आपके मामले में, के बाद से यह एक टाइमस्टैम्प है, एक और विकल्प, readonly_fields के क्षेत्र जोड़ सकते हैं ताकि यह बिल्कुल नहीं बदला जा सकता जोड़ना है।

+0

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

+0

आप व्यवस्थापक के दिनांक समय विजेट के लिए कोड में खुदाई करने का प्रयास कर सकते हैं, लेकिन मुझे नहीं पता कि माइक्रोसॉन्ड को शामिल करने के लिए इसे अनुकूलित करना कितना आसान होगा। – Alasdair

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