2013-06-13 8 views
15

मैं की तरह एक क्वेरीसमूह है:रूपांतरण

qs = MyModel.objects.filter(name='me').values_list('activation_date') 

यहाँ activation_date मॉडल में DateTimeField है। जब मैं इस क्यू से एक्सेल शीट डाउनलोड करता हूं तो मुझे स्ट्रिंग प्रारूप में सक्रियण दिनांक नहीं मिल रहा है। मैं स्ट्रिंग में इस क्षेत्र ('activation_date') को कैसे परिवर्तित कर सकता हूं या इसे qs में टाइप कैसे करें?

+0

आप 'फ्लैट याद कर रहे हैं = TRUE' – karthikr

उत्तर

13

https://docs.djangoproject.com/en/dev/ref/models/fields/#datetimefield

एक तारीख और समय, एक datetime.datetime उदाहरण से अजगर में प्रतिनिधित्व किया।

आप सीधे यह कास्टिंग एक DateTimeField के एक स्ट्रिंग प्रतिनिधित्व प्राप्त कर सकते हैं: (

str(obj) 
# obj = qs[0][0] ? or qs[0][1] ? 

आप इस तरह परिणाम प्राप्त करेंगे इस उदाहरण मैं datetime.datetime.now (प्रयोग) के बाद से एक DateTimeField है) datetime.datetime द्वारा प्रतिनिधित्व समान व्यवहार है:

>>> now = datetime.datetime.now() 
>>> str(now) 
'2013-06-26 00:14:26.260524' 

अगर आप कम जानकारी या अन्य मोड में स्वरूपित आप strftime उपयोग कर सकते हैं() उन्हें प्रारूप के लिए समारोह चाहते हैं। देखें:

>>> now.strftime('%Y-%m-%d %H:%M') 
'2013-06-26 00:14' 
+1

(जैसे 11 = नवंबर)? – dietbacon

+0

@dietbacon ने अभी 'try.strftime ('% B') 'की कोशिश की है? –

3

आप Postgres का उपयोग कर रहे हैं, तो आप इसे इस (date format options here) की तरह कर सकते हैं। समाधान डेटाबेस निर्भर है, लेकिन यह सुनिश्चित करता है कि क्वेरी करने के बाद पाइथन भूमि में एक लंबी सूची हालांकि लूपिंग धड़कता है।

qs = MyModel.objects.filter(name='me') 
qs = qs.extra(select={'datestr':"to_char(activation_date, 'YYYY-MM-DD HH24:MI:SS')"}) 
qs = qs.values_list('datestr') 

मुझे यकीन है कि MySQL Postgres के TO_CHAR के रूप में कुछ बराबर कार्य है, लेकिन आपको लगता है कि खोजने के लिए अपने दम पर के रूप में मैं एक MySQL पुरुष नहीं कर रहा हूँ होगा।

3
qs = MyModel.objects.filter(name='me') 
qs = qs.extra(select={'datestr':"DATE_FORMAT(activation_date, '%Y-%m-%d')"}) 
qs = qs.values_list('datestr') 
+0

दूसरी पंक्ति होना चाहिए: '' qs = qs.extra (select = {'datestr': "DATE_FORMAT (सक्रियण_डेट, '%% वाई - %% मीटर - %% डी')"} '' – user2002692

0

आप map फ़ंक्शन का उपयोग कर क्वेरीसेट में दिनांक को स्ट्रिंग में भी परिवर्तित कर सकते हैं। उदाहरण:

qs = MyModel.objects.filter(name='me').values_list('activation_date', flat=True) 
data = map(str, qs) 
1

extra Django 2 में मान्य नहीं है।0

है यही कारण है कि मुझे लगता है कि सबसे अच्छा समाधान एक stringified दिनांक प्राप्त करने के लिए है:

foo_bar = FooBarModel.objects.annotate(
    str_datetime=Cast(
     TruncSecond('some_datetime_field', DateTimeField()), CharField() 
    ) 
).values('str_datetime').first() 

परिणाम है:

foo_bar.str_datetime: 
(str)'2014-03-28 15:36:55' 

इसके अलावा मैं उल्लेख करना चाहते हैं कि आप इसे किसी भी तरह से प्रारूपित कर सकते हैं:

from django.db.models import Value 

foo_bar = FooBarModel.objects.annotate(
    day=Cast(ExtractDay('some_datetime_field'), CharField()), 
    hour=Cast(ExtractHour('some_datetime_field'), CharField()), 
    str_datetime=Concat(
     Value('Days: '), 'day', Value(' Hours: '), 'hour', 
     output_field=CharField() 
    ) 
).values('str_datetime').first() 

परिणाम है: है वहाँ किसी भी तरह से सीधे पाठ समय में महीने के पाने के लिए

foo_bar.str_datetime: 
(str)'Days: 28 Hours: 15' 
संबंधित मुद्दे