首页 > 解决方案 > 在序列化程序中使用标准反向关系管理器

问题描述

问题是关于在 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”?谢谢

标签: djangoserializationdjango-rest-framework

解决方案


的,您可以只指定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().


推荐阅读