6

Tôi cố gắng sử dụng trình tự tuần tự DRF để tuần tự hóa một đối tượng mô hình. Tôi tìm thấy DatetimeField trong đối tượng sẽ không xuất ra "2015-10-21T09:28:53.769000Z" của định dạng ISO-8601Đặt định dạng ngày giờ định dạng của cấu trúc khung còn lại django

Tài liệu DRF tra cứu tại sao tôi không thể xuất định dạng ISO-8601. Theo số datetimefield nói:

format - Chuỗi đại diện cho định dạng đầu ra. Nếu không được chỉ định, giá trị mặc định này sẽ có cùng giá trị với khóa cài đặt DATETIME_FORMAT, sẽ là 'iso-8601' trừ khi được đặt. Việc đặt thành một chuỗi định dạng cho biết rằng các giá trị trả về to_representation sẽ bị ép buộc thành đầu ra chuỗi. Các chuỗi định dạng được mô tả dưới đây. Đặt giá trị này thành Không cho biết rằng Python

Điều đó có nghĩa là mặc định là đầu ra iso-8601 nếu tôi không bao giờ đặt đối số DATETIME_FORMAT? Chưa, nó vẫn không thay đổi.

Khi tôi cố gắng viết thiết lập của dự án django như sau:

REST_FRAMEWORK = { 
    'DATETIME_FORMAT': "iso-8601", 
} 

hoặc tôi viết trong luận DatetimeField như sau:

class UserSerializer(...): 
    last_login = DatetimeField(format='iso-8601') 
    class Meta: 
     model = User 
     fields = ('email', 'displayname', 'is_active', 
        'date_joined', 'last_login') 

Nó vẫn không thay đổi một lần nữa.

Bất kỳ ai biết cách đặt?

+1

'DatetimeField trong đối tượng sẽ không đầu ra "..." của định dạng ISO-8601' Nó ra sao? –

+0

Tôi đang đối mặt với cùng một vấn đề! Nếu tôi sử dụng các validated_data của lĩnh vực này, nó sẽ xuất ra một cái gì đó như "2018-01-12 10:20:55" (có thể là đại diện mặc định của một đối tượng datetime?). Sự hiểu biết của tôi về tài liệu là đầu ra phải là "2018-01-12T10: 20: 55 + 00: 00". Tôi gọi isoformat() trên validated_data để có một định dạng thích hợp cho bây giờ, nhưng tôi phải đã bỏ lỡ một cái gì đó ... – Laurent

Trả lời

12

Nếu bạn không konw những gì xảy ra và bạn vẫn không slove đó, tôi có thể xác định một định dạng datettime trong việc thiết như sau:

REST_FRAMEWORK = { 
    'DATETIME_FORMAT': "%Y-%m-%dT%H:%M:%S.%fZ", 
} 
1

Bạn không cần phải xác định DATETIME_FORMAT trong cài đặt hoặc format trong trường last_loginiso-861 là định dạng mặc định.

Dưới đây là ví dụ mẫu hiển thị đầu ra được nối tiếp của trường datetime ở định dạng iso-861.

In [1]: from rest_framework import serializers 

In [2]: from datetime import datetime 

In [3]: class SomeSerializer(serializers.Serializer): 
    ....:  last_login = serializers.DateTimeField() 
    ....:  

In [4]: x = SomeSerializer(data={'last_login':datetime.now()}) 

In [5]: x.is_valid() 
Out[5]: True 

In [6]: x.data # representation of 'last_login' will be in iso-8601 formatted string 
Out[6]: OrderedDict([('last_login', u'2015-10-22T09:32:02.788611Z')]) 
Các vấn đề liên quan