【发布时间】:2018-02-16 21:01:03
【问题描述】:
我有一个模型,该模型具有 DateTime 字段和该模型的序列化程序。我有一个 API 端点,它只是 POST 来创建模型对象,但问题是对该端点的请求将发送完全不同的日期/时间格式,因此在保存之前需要在 Django 端重新格式化。
通常(没有 DRF),我只会覆盖模型的保存方法,但现在随着 DRF 的引入,我是否应该覆盖模型或序列化程序的保存方法?我在考虑是否覆盖模型的保存方法,以便在保存之前重新格式化日期/时间值。那么serializer.is_valid()本身会在接收到错误的日期时间格式时抛出错误,因为序列化器直接映射到模型字段并且不知道模型保存方法?
这样做的最佳方法是什么?
models.py
class Job(models.Model):
name = models.CharField(max_length=150)
age = models.CharField(max_length=200)
start_time = models.DateTimeField()
class Meta:
unique_together = ('name', 'age', 'start_time')
序列化器.py
class JobSerializer(serializers.ModelSerializer):
name = serializers.CharField()
age = serializers.CharField(required=False)
start_time = serializers.CharField(required=False)
class Meta:
model = Job
fields = ('name', 'age', 'start_time')
【问题讨论】:
-
你的推理很难理解。序列化程序应负责以模型期望的格式创建数据。这不是您应该更改的保存,而是字段验证-尽管我不明白您为什么使用 CharField 而不是 DateTimeField 以及相关的
input_formats。
标签: django django-rest-framework