Django Postman错误,该字段是必需的
Django Postman错误,该字段是必需的
当我通过http://localhost:8000/api/franchise/charge/
发送POST请求到本地 Django 时,我得到了以下错误信息:
{"franchise":["This field is required."]}
我在 Postman 中的请求体中发送了以下两个字段:
key: price value: 1000 key: franchise value: 1
URL为:router.register(r'franchise/charge', views.FranchiseChargeViewSet)
视图部分如下:
class FranchiseChargeViewSet(viewsets.ModelViewSet): queryset = FranchiseCharge.objects.all() serializer_class = FranchiseChargeSerializer def get_permissions(self): permission_classes = [] if self.action == 'create': permission_classes = [IsFranchise] elif self.action == 'retrieve': permission_classes = [IsFranchise] elif self.action == 'list': permission_classes = [IsFranchise] elif self.action == 'update' or self.action == 'partial_update': permission_classes = [IsFranchise] elif self.action == 'destroy': permission_classes = [IsFranchise] return [permission() for permission in permission_classes]
模型如下:
class FranchiseCharge(models.Model): franchise = models.ForeignKey(Franchise,null=True,on_delete=models.SET_NULL, default=1) time = models.DateTimeField(default=timezone.now) price = models.PositiveIntegerField(default=0)
序列化器如下:
class FranchiseChargeSerializer(RelationModelSerializer): franchise = FranchiseSerializer(is_relation=True) class Meta: model = FranchiseCharge fields = ('id','franchise','time','price') @transaction.atomic def create(self, validated_data): instance = FranchiseCharge.objects.create(**validated_data) return instance
请问我需要做什么来修复这个问题?
在使用Django进行开发时,可能会遇到一些错误。其中之一是在使用Postman进行测试时出现错误消息"this field is required"。
出现这个错误的原因是因为在使用嵌套序列化器(nested serializer)时,数据应该是嵌套的JSON对象。
根据我所看到的情况,您正在使用RelationModelSerializer(可能是链接文章中描述的那种) - 它还建议在嵌套的JSON中放入相关模型的主键字段名:
{
"price": 1000,
"franchise": {
"id": 1
}
}
对于常规的DRF嵌套序列化器,可以使用不同的序列化器来进行读取和写入。这样写入的序列化器可以配置为不使用嵌套序列化器,而是直接在franchise字段中接受franchise_id。
可以参考这个SO答案中关于嵌套序列化器的内容。