Примите отметку времени Unix как целое и преобразуйте в DateTimeField для сохранения в django - PullRequest
1 голос
/ 01 апреля 2020

У меня есть модель Travel, необходимо принять Unix значение извне, как почтальон, затем преобразовать в DateTimeField для сохранения данных

class MyModel:
    class Meta:
        abstract = True
    def ToDateTime(self,timestamp):
        date=datetime.fromtimestamp(timestamp)
        return date
Travel(MyModel):
    departure_at = models.DateTimeField()
    arrival_at  = models.DateTimeField()

Serializer

class TravelSerializer(serializers.ModelSerializer):
    departure_at=serializers.DateTimeField(write_only= True)
    arrival_at=serializers.DateTimeField(write_only= True) 
class Meta:
        model=Travel
        fields = ('departure_at','arrival_at')
    def validate(self, attrs):
        attrs = self.add_departure_at(attrs)
        attrs = self.add_arrival_at(attrs)
        return attrs 
    def add_departure_at(self,attrs):
        departure_at=attrs['departure_at']
        obj=BaseModel()
        todate=obj.ToDateTime(int(arrival_at))
        return todate

Данные почтальона

{
    "departure_at": "1585750708",
    "arrival_at"  : "1585664308",
}

, но здесь Я получаю эту ошибку

{
    "departure_at": [
        "Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]."
    ],
    "arrival_at": [
        "Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]."
    ]
}

Как решить эту ошибку?

1 Ответ

1 голос
/ 01 апреля 2020

Используйте IntegerField вместо DateTimeField

from datetime import datetime


class TravelSerializer(serializers.ModelSerializer):
    departure_at = serializers.<b>IntegerField</b>(write_only=True)
    arrival_at = serializers.<b>IntegerField</b>(write_only=True)

    <b>def validate_departure_at(self, value):
        return datetime.fromtimestamp(value)

    def validate_arrival_at(self, value):
        return datetime.fromtimestamp(value)</b>

    class Meta:
        model = Travel
        fields = ('departure_at', 'arrival_at')


Пример:

payload = {
    "departure_at": 1585750708,
    "arrival_at": 1585664308,
}
s = TravelSerializer(data=payload)
s.is_valid(True)
print(s.validated_data)
...