我有一个模型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)