Django REST Framework 通过 PK 之外的另一个字段设置相关字段(没有 NestedSerializer)

标签 django django-rest-framework

我有以下序列化器:

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/

相关文章:

python - Django 休息 : Retrieving by a different parameter using ModelViewSet

python - python(django)中的复杂 boolean 表达式

django - 如何使用 django docker nginx 和 postgresql 使静态文件工作,因为它不为它们提供服务

python - Haystack 可以通过 geodjango PointField 进行过滤吗?

python - Django pickle.dumps(model.query) 命中数据库

python - NoReverseMatch Django 休息框架

python - Django StreamingHttpResponse 没有设置正确的文件名

python - Django 中的分组表单字段?

Django rest 框架发送带单引号的字符串而不是带双引号的 JSON

Django REST Framework ManyToMany 过滤多个值