django - AssertionError:应为“日期”,但得到了“日期时间”。拒绝强制,因为这可能意味着丢失时区信息
问题描述
我在创建 API 时遇到了一些问题
这是我的模型
class Education(AuditFields):
user = models.ForeignKey(User, on_delete=models.CASCADE)
school = models.CharField(max_length=255, blank=True)
field_of_study = models.CharField(max_length=255, blank=True)
start_year = models.DateField(default=datetime.now)
end_year = models.DateField(default=datetime.now)
这是我的序列化程序:
class EducationSerializer(ModelSerializer):
class Meta:
model = Education
fields = '__all__'
意见:
class EducationCreateView(CreateAPIView):
def get_queryset(self, *args, **kwargs):
queryset_list = Education.objects.filter(
user=self.request.user)
return queryset_list
serializer_class = EducationSerializer
def perform_create(self, serializer):
serializer.save(user=self.request.user)
如果我发布一些东西,它会显示以下消息
{
"user": [
"This field is required."
]
}
如果我像这样更改我的序列化程序
class EducationSerializer(ModelSerializer):
class Meta:
model = Education
fields = '__all__'
extra_kwargs = {'user': {'required': False}}
我收到这样的错误
预期一个
date
,但得到一个datetime
。拒绝强制,因为这可能意味着丢失时区信息。使用自定义只读字段并明确处理时区问题。
如何解决这个问题。
解决方案
错误是由于模型中的两个字段:start_year
和end_year
您已将它们定义为date
类型,但将datetime
值分配为默认值。
尝试按照给定的方式修改模型中的两个字段并导入日期时间:
import datetime
start_year = models.DateField(default=datetime.date.today)
end_year = models.DateField(default=datetime.date.today)
希望这可以帮助
推荐阅读
- yocto - 如何为 512 Mb Ram 配置 u-boot
- mysql - 如何获取存储过程结果以用于另一个存储过程或查询语句
- python - 无法使用 pip 下载 mod_wsgi
- javascript - JavaScript atob 与 Notepad++ Base64 解码不同
- python - Django - 无法启动服务器
- swift4 - 呈现视图使用缩放动画约束错误 [Swift]
- react-native - 指向 Slack 的深层链接以打开直接消息并预填充消息框
- javascript - API 所需的信息 https://tiles.virtualearth.net/tiles/cmd/StreetSideBubbleMetaData
- c# - GetEnumerator().Current 在主函数中调用时给了我一个异常
- elasticsearch - 启用 X-pack 的 ABAC 系统上的 java.lang.UnsupportedOperationException