python - 如何在 Django-Rest-Framework 中只深入一个字段?
问题描述
我有一个IPv4ListSerializer
,它有一个depth = 1
:
class IPv4ListSerializer(ModelSerializer):
"""
ipv4
"""
ip_status = serializers.CharField(read_only=True)
class Meta:
model = IPv4Manage
fields = "__all__"
depth = 1
但结果它变成了每个领域depth 1
:
[
{
"id": 281,
"ip_status": "Vlaned",
"ip": "43.243.33.1",
"netmask": "255.255.255.248",
"prefix": 29,
"is_gateway": false,
"is_network_ip": false,
"is_broadcast_ip": false,
"desc": null,
"ctime": "2018-04-26T21:17:33.623092+08:00",
"uptime": "2018-06-02T12:48:41.882016+08:00",
"ipv4network": {
"id": 21,
"network_ip": "43.243.33.0",
"prefix": 24,
"ctime": "2018-04-26T21:17:33.533667+08:00",
"uptime": "2018-04-26T21:17:33.533814+08:00",
"area_partition": 7
},
"vlaned_ipv4network": {
"id": 1,
"network_ip": "43.243.33.0",
"prefix": 29,
"gateway_ip": "43.243.33.6",
"broadcast_ip": "43.243.33.7",
"ctime": "2018-04-26T21:27:56.011624+08:00",
"uptime": "2018-04-26T21:27:56.258053+08:00",
"ipv4network": 21,
"vlanedipv4networkgroup": 4
},
"physical_server": {
"id": 23,
"name": "SE01-A1",
"desc": "desc",
"cpu": "Intel Xeon E3-1230 v5",
"ram": "Supermicro DDR4___16",
"disk": "Inter SSD___240",
"price": "1000.00",
"server_status": "ready",
"pay_time": null,
"expire_time": null,
"ipmi_addr": "172.16.30.1",
"ipmi_account_and_pwd": null,
"has_intranet": true,
"intranet_ip": null,
"customer_desc": null,
"whmcs_tblorders_id": null,
"ctime": "2018-05-08T16:15:50.639962+08:00",
"uptime": "2018-08-20T18:25:27.289100+08:00",
"switches": 3,
"physical_server_model": 5,
"switchesport": 57,
"cabinet": 3,
"task": null,
"user": null,
"trade_record": null
}
},
....
]
我只能深入一个领域吗?比如 if depth
ipv4network
,我的要求是:
[
{
"id": 281,
"ip_status": "Vlaned",
"ip": "43.243.33.1",
"netmask": "255.255.255.248",
"prefix": 29,
"is_gateway": false,
"is_network_ip": false,
"is_broadcast_ip": false,
"desc": null,
"ctime": "2018-04-26T21:17:33.623092+08:00",
"uptime": "2018-06-02T12:48:41.882016+08:00",
"ipv4network": {
"id": 21,
"network_ip": "43.243.33.0",
"prefix": 24,
"ctime": "2018-04-26T21:17:33.533667+08:00",
"uptime": "2018-04-26T21:17:33.533814+08:00",
"area_partition": 7
},
"vlaned_ipv4network": 1,
"physical_server": 23,
},
....
]
解决方案
depth
适用于特定模型中的所有 FK 关系。因此,如果您需要删除某些特定字段的深度功能,请为每个 fk 字段使用不同的序列化程序(种类nested serializer
)。
例子
class IPv4ListSerializer(ModelSerializer):
ip_status = serializers.CharField(read_only=True)
ipv4network = IPV4NetworkSerializer()
class Meta:
model = IPv4Manage
fields = "__all__"
depth = 1 # remove this "depth"
推荐阅读
- angularjs - md-autocomplete 不适用于 angularjs 中的数字字段
- sendgrid - 如何在 Sendgrid-Ruby v3 中设置类别?
- javascript - Array - join 和 toString 调用在 toLocaleString 调用后返回一个空字符串
- python - 使用 tex 数学上标时,Matplotlib 换行符更大
- reactjs - Yarn start 没有为我提供在移动设备上查看网站的网络地址
- android - 如何在分页android中搜索/过滤项目?
- spring-boot - Solr:@Dynamic 字段不适用于选择查询
- angular - 如何在点后设置数字和货币符号的样式?
- sql - 如何在 Netezza sql 中随时间聚合?
- python - Webots 中的远程对象创建