我有以下序列化器:
class OrderSerializer(serializers.ModelSerializer):
pair_name = serializers.ReadOnlyField(source='pair.name', read_only=False)
deposit_address = NestedReadOnlyAddressSerializer(many=False, read_only=True)
withdraw_address = NestedAddressSerializer(many=False, read_only=False, partial=True)
pair.name
是一个唯一的字段。
是否可以允许使用对名称进行 PK 分配 (order.pair
)。
[POST]
{'withdraw_address': 'x', 存款: 'address': 'y', 'pair_name': 'ETHBTC'}
而不是:
[POST]
{'withdraw_address': 'x', 存款: 'address': 'y', 'pair': 1}
尝试查看文档并没有找到解决方案。 谷歌搜索一个小时也没有帮助。
目前 lookup_field
只能在 ViewSet
上设置,而不能在 Serializer
上设置。
最佳答案
首先,如果您希望能够接受数据,我认为您不需要只写字段。
要遵循良好的模式,请查看 Django REST Framework 关于可写嵌套序列化器的文档。 http://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers
您基本上将覆盖序列化器的 create()
和 update()
方法来适本地设置对值。
关于Django REST Framework 通过 PK 之外的另一个字段设置相关字段(没有 NestedSerializer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45720810/