django - 在序列化程序中使用标准反向关系管理器
问题描述
问题是关于在 DRF 中使用标准 Django 后向相关管理器名称。
我有以下序列化程序
class ExtraUserSerializer(serializers.ModelSerializer):
boatmodel_set = serializers.PrimaryKeyRelatedField(many=True,
queryset=BoatModel.objects.all())
class Meta:
model = get_user_model()
fields = ("id", "username", 'boatmodel_set', )
此序列化程序表示主要模型 ExtraUser,而boat_model 集表示与次要模型 BoatModel 的反向关系。选择相关名称“boatmodel_set”只是因为主要核心 Django 站点使用这个标准的“secondarymodel_set”传统的向后相关管理器名称,因此在 DRF 部分我必须使用related_name =“boatmodel_set”,以便不更改主要部分中的代码。
问题是 - 是否可以保留 related_name = “boatmodel_set” 但在呈现的 json 中将其表示为,例如“boats”?谢谢
解决方案
是的,您可以只指定source=
参数 [drf-doc],并以不同的方式命名字段,例如:
class ExtraUserSerializer(serializers.ModelSerializer):
boats = serializers.PrimaryKeyRelatedField(
many=True,
queryset=BoatModel.objects.all(),
source='boatmodel_set'
)
class Meta:
model = get_user_model()
fields = ('id', 'username', 'boats')
这里 JSON 端将包含"boats": ...
,而模型端仍将使用myuser.boatmodel_set.all()
.
推荐阅读
- php - 获取不同的列并返回过滤结果
- mysql - mySQL 中的存储过程问题
- javascript - 关闭浏览器窗口时调用 logout.aspx 页面
- python - TensorFlow.js Stateful SimpleRNN Tensor 被配置
- arduino - 我可以使用我的 Arduino Uno 将传感器和蓝牙芯片连接到我的 L293D DC Motor Drive Shield 上吗?
- python - YOLO 锚箱
- php - 使用 PHPMailer 发送 HTML 格式的邮件
- crystal-reports - 如何使用水晶报表将 1,2,3,4 更改为 F1,F2,F3,F4
- c# - 尝试语句不执行 - 直接赶上
- python - 使用 Trackbar Python 进行扩张