PrimaryKeyRelatedField在validated_data

时间:2017-11-30 15:46:38

标签: python django django-rest-framework

我正在创建一个序列化程序,假设在POST请求上创建一个对象。但是,当运行serializer.validated_data时,currency中不包含QueryDict。如果我例如从PrimaryKeyRelatedField更改为IntegerField它包含它,但是当它指向另一个表中的记录时,这不是最佳的。当我使用validated_data时,为什么PrimaryKeyRelatedField中没有包含该货币?

串行

class InvoiceSerializer(serializers.ModelSerializer):
    deposit_amount = serializers.FloatField()
    receive_amount = serializers.FloatField()
    currency = serializers.PrimaryKeyRelatedField(read_only=True)

    class Meta:
        """Meta class to map serializer's fields with the model fields."""
        model = Invoice
        fields = ('task', 'deposit_amount', 'receive_amount', 'currency')
        read_only_fields = ('created_at', 'updated_at', 'currency')


    def create(self, validated_data):
        return Invoice.objects.create(**validated_data)

当我在我的视图集中调用request.data时,它会返回:

{'currency': 2, 'task': 1, 'deposit_amount': 2.01, 'receive_amount': 118652.7}

然而,当我返回serializer.validated_data时:

OrderedDict([('task', 1), ('deposit_amount', 2.01), ('receive_amount', 118652.7)])

1 个答案:

答案 0 :(得分:0)

 currency = serializers.PrimaryKeyRelatedField(read_only=True)

此字段标记为read_only。您将无法在validated_data中找到它,因为它们是写入操作。 您必须将read_only标志设置为False才能实现此目的。