6

Cerco di utilizzare i serializzatori DRF per serializzare un oggetto modello. Trovo che il DatetimeField in oggetto non emetterà "2015-10-21T09:28:53.769000Z" del formato ISO-8601Imposta il formato DatetimeField della configurazione del framework di riposo django

Cerco documento DRF perché non posso produrre il formato ISO-8601. Secondo datetimefield dice:

format - Una stringa che rappresenta il formato di output. Se non specificato, il valore predefinito è lo stesso valore della chiave delle impostazioni DATETIME_FORMAT, che sarà 'iso-8601', a meno che non sia impostato. L'impostazione su una stringa di formato indica che i valori di ritorno di to_representation devono essere forzati all'output della stringa. Le stringhe di formato sono descritte di seguito. L'impostazione di questo valore su Nessuno indica che Python

Significa E 'impostazione predefinita per l'output in formato iso-8601 se ho mai messo DATETIME_FORMAT argomento? Non ancora, non è ancora cambiato.

quando provo a scrivere cornice del progetto Django come il seguente:

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

o scrivo in argomento DatetimeField come la seguente:

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

E 'ancora nessun cambiamento di nuovo.

Qualcuno sa come impostarlo?

+1

'DatetimeField in oggetto non emetterà "..." del formato ISO-8601' Che cosa emette? –

+0

Sto affrontando lo stesso problema! Se uso il validated_data di questo campo, emette qualcosa come "2018-01-12 10:20:55" (che potrebbe essere la rappresentazione predefinita di un oggetto datetime?). La mia comprensione del documento è che l'output dovrebbe essere "2018-01-12T10: 20: 55 + 00: 00". Chiamo isoformat() sul validated_data per avere un formato corretto per ora, ma devo aver perso qualcosa ... – Laurent

risposta

12

Se non konw ciò che capita e ancora non slove questo, posso definire un formato datettime nella creazione come la seguente:

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

Non è necessario definire DATETIME_FORMAT nelle impostazioni o format nel campo last_login come iso-861 è il formato predefinito.

Ecco un esempio di esempio che mostra l'output serializzato di un campo datetime nel formato 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')]) 
Problemi correlati