2017-12-08 20 views
9

बनाने की तारीख के कारण जेसन सरणी परिणाम प्रतिक्रिया को अनुकूलित करें मेरे पास यह Django REST API है जो मैं जेसन प्रतिक्रिया के लिए सूची क्वेरी परिणाम को कस्टमाइज़ करना चाहता हूं। इसका कारण तारीख स्वरूपण और संभावित रूप से अन्य स्वरूपण के कारण भी है।django बाकी ढांचे की सूची क्वेरी

यह बाकी एपीआई है, समस्या बनाई गई है। मैं इसे इस तरह स्वरूपित करना चाहता हूं: ('% वाई-% एम-% डी% एच:% एम')। निम्नलिखित कोड में कोई स्वरूपण नहीं है, यह केवल परिणाम पर एक जेसन सूचीबद्ध करेगा और बना देगा।

@api_view(['POST']) 
def employee_get_list_by_page(request): 
    val_params = ["id", "username","first_name","last_name","created_at"]  
    employee_list = Employee.objects.all().values(*val_params).order_by('id') 

    page = request.GET.get('page', request.POST['page']) 
    paginator = Paginator(employee_list, request.POST['page_limit']) 

    try: 
     employees = paginator.page(page) 
    except PageNotAnInteger: 
     employees = paginator.page(request.POST['page']) 
    except EmptyPage: 
     employees = paginator.page(paginator.num_pages) 

    return Response(list(employees), status=status.HTTP_200_OK)  

यह मॉडल है। नोटिस मेरे पास .as_dict() फ़ंक्शन है। Emp = Employee.objects.get (id = 6) का उपयोग करने जैसे व्यक्तिगत रिकॉर्ड के लिए, मैं इस emp.as_dict() की तरह कर सकता हूं और परिणाम में form_at में स्वरूपित दिनांक होगा।

class Employee(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='employee') 
    company = models.ForeignKey(Company) 
    username = models.CharField(max_length=30, blank=False)  
    first_name = models.CharField(max_length=30, blank=False) 
    last_name = models.CharField(max_length=30, blank=False)  
    created_at = models.DateTimeField(auto_now_add=True) 

    def __str__(self): 
     return self.user.username 

    def as_dict(self): 
     return {"id": "%d" % self.id, 
       "username": self.username if self.username else "", 
       "first_name": self.first_name if self.first_name else "", 
       "last_name": self.last_name if self.last_name else "",    
       "created_at":self.created_at.strftime('%Y-%m-%d %H:%M')} 

यह सूची का जेसन प्रतिक्रिया परिणाम है। ध्यान दें कि दिनांक स्वरूपित नहीं है।

[ 
    { 
    "id": 7, 
    "username": "mick", 
    "first_name": "zack", 
    "last_name": "ray", 
    "created_at": "2017-12-07T10:09:28.376427Z" <-- I want this to be ('%Y-%m-%d %H:%M') 
    }, 
    { 
    "id": 8, 
    "username": "hu", 
    "first_name": "rar", 
    "last_name": "baw", 
    "created_at": "2017-12-10T09:08:27.473997Z" 
    } 
] 

प्रश्न: मैं कैसे स्वरूपण मैं चाहता हूँ के साथ एक json सूची प्रतिक्रिया हो सकती है?

+0

से रेफरी प्राप्त कर सकते हैं क्यों Django में paginator में अपने 'as_dict' विधि का उपयोग करना चाहिए? –

+0

हे @ एक्सिल, मैं सोच रहा था, क्या किसी भी उत्तर ने आपकी मदद की? – Satendra

+0

क्षमा करें मैं बहुत व्यस्त था। इसे आजमाएं। – Axil

उत्तर

8

Django बाकी ढांचे के उपयोग serializers, एक serializer वर्ग

from rest_framework import serializers 

class EmployeeSerializer(serializers.ModelSerializer): 
    created_at = serializers.DateTimeField(format='%Y-%m-%d %H:%M') 

    class Meta: 
     model = Employee 
     fields = ("id", "username", "first_name", "last_name", "created_at") 

अब अपने कर्मचारियों serializer वर्ग का उपयोग कर क्वेरीसमूह पार्स पैदा करते हैं।

@api_view(['POST']) 
def employee_get_list_by_page(request): 
    employees = Employee.objects.all().values(*val_params).order_by('id') 
    serializer = EmployeeSerializer(employees, many=True) 

    # rest of your code 
    ... 

    return Response(serializer.data, status=status.HTTP_200_OK) 

स्वरूप तार या तो Python strftime formats जो स्पष्ट प्रारूप, या विशेष स्ट्रिंग iso-8601, जो इंगित करता कि ISO 8601 शैली datetimes इस्तेमाल किया जाना चाहिए निर्दिष्ट हो सकता है। (जैसे 2013-01-29T12:34:56.000000Z)

+0

यह काम करता है। क्या नया क्षेत्र बनाने के लिए धारावाहिक में संभव होगा? जैसे कि मेरे पास छवि है, मैं 3 प्रकार का उत्पादन करना चाहता हूं? छवि = {मूल = "url1", छोटा = "url2", मध्यम = "url3"} – Axil

+0

हां यह संभव है कि आप [SerializerMethodField] का उपयोग कर सकें (http://www.django-rest-framework.org/api आउटपुट अनुकूलित करने के लिए -गुइड/फ़ील्ड/# serializermethodfield)। – Satendra

0

आप परियोजना settings.py फ़ाइल में स्थापित करने formt समय परिभाषित करने की कोशिश कर सकते हैं, वहाँ समय प्रारूप सेटिंग के 4 प्रकार हैं: DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT, SHORT_DATETIME_FORMAT।

उदाहरण के लिए

:

DATE_FORMAT = 'Y-m-d H:i' 

अगर आप डीआरएफ उपयोग करते हैं, आप भी इस विधि परियोजना वैश्विक दिनांक स्वरूप सेटिंग्स को परिभाषित करने के लिए उपयोग कर सकते हैं।

आप https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-DATETIME_FORMAT

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