Ano*_*oop 2 django django-rest-framework
我在创建 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)
Run Code Online (Sandbox Code Playgroud)
这是我的序列化程序:
class EducationSerializer(ModelSerializer):
class Meta:
model = Education
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
意见:
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)
Run Code Online (Sandbox Code Playgroud)
如果我发布了一些东西,它会显示以下消息
{
"user": [
"This field is required."
]
}
Run Code Online (Sandbox Code Playgroud)
如果我像这样改变我的序列化程序
class EducationSerializer(ModelSerializer):
class Meta:
model = Education
fields = '__all__'
extra_kwargs = {'user': {'required': False}}
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误
期待一个
date
,但得到了一个datetime
。拒绝强制,因为这可能意味着丢失时区信息。使用自定义只读字段并明确处理时区问题。
如何解决这个问题。
您可以尝试为序列化器显式定义字段:
class EducationSerializer(ModelSerializer):
start_year = serializers.DateTimeField(format="%Y-%m-%d")
end_year = serializers.DateTimeField(format="%Y-%m-%d")
...
Run Code Online (Sandbox Code Playgroud)
小智 5
错误是因为模型中的两个字段:start_year
和end_year
您已将它们定义为date
类型,但分配了一个datetime
默认值。
尝试按照给定的方式修改模型中的两个字段并导入日期时间:
import datetime
start_year = models.DateField(default=datetime.date.today)
end_year = models.DateField(default=datetime.date.today)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
归档时间: |
|
查看次数: |
3797 次 |
最近记录: |