Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 在使用ModelSerializer创建之前编辑字段_Django_Serialization_Django Rest Framework_Python 3.7 - Fatal编程技术网

Django 在使用ModelSerializer创建之前编辑字段

Django 在使用ModelSerializer创建之前编辑字段,django,serialization,django-rest-framework,python-3.7,Django,Serialization,Django Rest Framework,Python 3.7,我有一个托盘,里面有东西。我需要根据外键值为托盘分配一个特定的编号,但代码中还没有 与邮递员一起,当我用一些json正文发帖时 若我给一些数字字段,那个么会得到一个数字不能复制的错误。 若我不发送数字,因为我在自定义的创建方法中提供了数字,我会得到一个错误,数字是必填字段。 若我从PalletSerializer中删除数字,它会保存,但当我需要获取它时,并没有数字可查看。 在创建之前添加数据的正确方法是什么?以下是序列化程序: class ContentSerializer(serializer

我有一个托盘,里面有东西。我需要根据外键值为托盘分配一个特定的编号,但代码中还没有

与邮递员一起,当我用一些json正文发帖时

若我给一些数字字段,那个么会得到一个数字不能复制的错误。 若我不发送数字,因为我在自定义的创建方法中提供了数字,我会得到一个错误,数字是必填字段。 若我从PalletSerializer中删除数字,它会保存,但当我需要获取它时,并没有数字可查看。 在创建之前添加数据的正确方法是什么?以下是序列化程序:

class ContentSerializer(serializers.ModelSerializer):    

    class Meta:
        model = models.Content
        fields = ('id', 'quantity', 'kilograms', 'container')

class PalletSerializer(serializers.ModelSerializer):
    contents = ContentSerializer(many=True)

    class Meta:
        model = models.Pallet
        fields = ('id', 'number', 'receipt_waybill', 'client', 'contents',)

    def create(self, validated_data):
        contents_data = validated_data.pop('contents')
        number = 123456
        pallet = models.Pallet.objects.create(number=number, **validated_data)
        for content_data in contents_data:
            specifications_data = content_data.pop('specifications')
            instance = models.Content.objects.create(pallet=pallet, **content_data)
            instance.specifications.set(specifications_data)

        return pallet

您可以将数字字段设置为只读。您可以通过在PalletSerializer中使用number=serializers.integerfield=True手动定义字段,或者在序列化程序的Meta类中定义只读字段='number',来实现这一点。

工作得非常好!我被困在这两天了。谢谢=