Django Postman错误,此字段为必填

时间:2020-02-18 11:05:34

标签: django

我要

{"franchise":["This field is required."]}

当我通过

向Django本地主机发送POST请求时

http://localhost:8000/api/franchise/charge/

我要发送以下两个字段作为邮递员的尸体

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

该如何解决?

1 个答案:

答案 0 :(得分:1)

您正在使用 嵌套序列化器 ,因此其数据应嵌套在数据中的json对象中。

如我所见,您正在使用RelationModelSerializer-如果它与链接文章中描述的相对应-还建议将相关的模型pk字段名称放在嵌套的json中:

{
  "price": 1000,
  "franchise": {
    "id": 1
  }
}

对于常规DRF嵌套序列化器-一种选择是使用不同的序列化器进行读写。这样,可以在不使用嵌套序列化程序的情况下配置用于写入的序列化程序,只需直接在franchise字段中接受franchise_id。

在嵌套序列化程序上检查this SO answer