我正在创建一个序列化程序,假设在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)])
答案 0 :(得分:0)
currency = serializers.PrimaryKeyRelatedField(read_only=True)
此字段标记为read_only
。您将无法在validated_data
中找到它,因为它们是写入操作。
您必须将read_only
标志设置为False才能实现此目的。