接受Unix时间戳为整数,并转换为DateTimeField以保存在django中



我有一个模型Travel需要接受来自外部的Unix值,比如poster,然后转换为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]."
]
}

如何解决此错误?

使用IntegerField而不是DateTimeField

from datetime import datetime

class TravelSerializer(serializers.ModelSerializer):
departure_at = serializers.IntegerField(write_only=True)
arrival_at = serializers.IntegerField(write_only=True)
def validate_departure_at(self, value):
return datetime.fromtimestamp(value)
def validate_arrival_at(self, value):
return datetime.fromtimestamp(value)
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)

最新更新