Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django邮递员错误此字段为必填字段_Django - Fatal编程技术网

Django邮递员错误此字段为必填字段

Django邮递员错误此字段为必填字段,django,Django,我要走了 {“特许经营”:[“此字段是必需的。”]} 当我通过向本地主机Django发送POST请求时 http://localhost:8000/api/franchise/charge/ 我将以下两个字段作为邮递员的尸体发送 key: price value: 1000 key: franchise value: 1 网址 看法 模型 序列化程序 class FranchiseChargeSerializer(RelationModelSerializer): fr

我要走了

{“特许经营”:[“此字段是必需的。”]}

当我通过向本地主机Django发送POST请求时

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

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

key: price       value: 1000
key: franchise   value: 1
网址

看法

模型

序列化程序

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
我需要做什么来修复此问题?

您正在使用嵌套序列化程序,因此它的数据应该是数据中的嵌套json对象

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

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

对于常规DRF嵌套序列化程序-一个选项是使用不同的序列化程序进行读写。这样就可以在不使用嵌套序列化程序的情况下配置用于写入的序列化程序,只需在特许权字段中直接接受特许权id即可

检查嵌套序列化程序

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
{
  "price": 1000,
  "franchise": {
    "id": 1
  }
}