我正在使用嵌套序列化器。我需要 ProfileSerializer
为获取请求返回完整的相关 Project
对象,并且只考虑 id 切换(改变当前),就像 relatedPrimaryField behaiviour 对于 ProfileSerializer< 上的 post/put 请求
。关于如何实现这一目标的任何解决方案?
class ProfileSerializer(serializers.ModelSerializer):
current = ProjectSerializer()
class Meta:
model = Profile
fields = ('function', 'current')
最佳答案
正如 Linova 所提到的,在不使用第三方库的情况下解决此问题的最简单方法是在序列化程序中声明两个单独的字段。你的嵌套序列化器 current
会保持不变,但您会添加一个新的 PrimaryKeyRelatedField
串行器。嵌套序列化程序应该是只读的,但相关字段不会是只读的。我通常将相关字段命名为 <field>_id
按照惯例。
在 GET 请求中,嵌套序列化程序和 id
字段将被返回,但对于 PUT 或 POST 请求只有 <field>_id
需要指定。
class ProfileSerializer(serializers.ModelSerializer):
current = ProjectSerializer(read_only=True)
current_id = serializers.PrimaryKeyRelatedField(queryset=Projects.objects.all(), source='current')
class Meta:
model = Profile
fields = ('function', 'current', 'current_id')
关于django - DRF PrimaryRelatedField 写入时和 NestedSerializer 读取时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42833368/