You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中NestedHyperlinkedModelSerializer外键返回链接而非ID如何处理

问题原因

你使用的NestedHyperlinkedModelSerializer继承自超链接系列序列化器,默认会自动将外键字段映射为超链接类型的序列化字段,所以直接在fields中添加client_id时,返回的是关联资源的url而非数据库存储的数字ID。

解决方案

直接在MailDropSerializer中显式覆盖client_id字段的序列化规则,指定为整数类型即可,修改后的序列化器代码如下:

from rest_framework import serializers
class MailDropSerializer(NestedHyperlinkedModelSerializer):
    parent_lookup_kwargs = {
        'client_pk': 'client_id',
    }
    # 显式指定client_id为IntegerField,直接读取外键存储的ID值
    client_id = serializers.IntegerField()

    class Meta:
        model = MailDrop
        fields = ['id', 'title', 'client_id']

修改完成后不需要改动其他逻辑,你已经传入的context参数可以保留,接口将直接返回数字类型的client_id,符合你的预期格式。

可选替代方案

如果你不想显式定义字段,也可以直接使用Django外键字段默认生成的_id后缀属性,将client_id_id加入fields列表,同时可以通过source参数自定义返回的字段名:

class MailDropSerializer(NestedHyperlinkedModelSerializer):
    parent_lookup_kwargs = {
        'client_pk': 'client_id',
    }
    client_id = serializers.IntegerField(source='client_id_id')

    class Meta:
        model = MailDrop
        fields = ['id', 'title', 'client_id']

内容的提问来源于stack exchange,提问作者Manan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:04