6

私は、DRFシリアライザを使用してモデルオブジェクトを直列化しようとしています。オブジェクトのDatetimeFieldがISO-8601形式の"2015-10-21T09:28:53.769000Z"を出力しないことがわかりましたdjango restフレームワーク設定のDatetimeFieldフォーマットの設定

なぜ私はISO-8601形式を出力できないのですか? datetimefieldによると:

format - 出力フォーマットを表す文字列。これが指定されていない場合、DATETIME_FORMAT設定キーと同じ値になります。設定されていなければ、 'iso-8601'になります。書式文字列に設定すると、to_representationの戻り値を文字列出力に強制する必要があります。フォーマット文字列については後述します。 Noneにこの値を設定するには、Pythonが

それは私がDATETIME_FORMAT引数を設定しない場合には、出力iso-8601形式にデフォルトだ意味していることを示していますか?まだ、それは変わりません。

は、私は次のようDjangoプロジェクトの設定を記述しようとすると:

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

または私は次のようDateTimeField型引数に書く:

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

それは再びまだ変更ません。

誰でも設定方法は分かりますか?

+1

'DateTimeField型のオブジェクトで出力されませんISO-8601フォーマットの "..."は何を出力しますか? –

+0

私は同じ問題に直面しています!このフィールドのvalidated_dataを使用すると、「2018-01-12 10:20:55」のようなものが出力されます(datetimeオブジェクトのデフォルト表現かもしれません)。私の文書の理解は、出力は "2018-01-12T10:20:55 + 00:00"でなければならないということです。私はvalidated_dataのisoformat()を今のところ適切な形式にするよう呼びますが、何かを見逃しているに違いありません... – Laurent

答えて

12

あなたが起こると、あなたはまだそれをsloveいないもの、私は以下のように設定してdatettimeフォーマットを定義することができますkonwない場合:

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

DATETIME_FORMATを設定したり、をlast_loginに設定する必要はありません。iso-861はデフォルトの形式です。

ここに、iso-861形式のdatetimeフィールドのシリアル化された出力を示すサンプルの例があります。

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')]) 
関連する問題