首页 > 解决方案 > 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。拒绝强制,因为这可能意味着丢失时区信息。使用自定义只读字段并明确处理时区问题。

如何解决这个问题。

标签: djangodjango-rest-framework

解决方案


错误是由于模型中的两个字段:start_yearend_year

您已将它们定义为date类型,但将datetime值分配为默认值。

尝试按照给定的方式修改模型中的两个字段并导入日期时间:

import datetime

    start_year = models.DateField(default=datetime.date.today)
    end_year = models.DateField(default=datetime.date.today)

希望这可以帮助


推荐阅读