我正在使用嵌套的序列化程序。我需要ProfileSerializer
为get请求返回完整的相关Project
对象,并且只考虑id切换(更改当前),就像在ProfileSerializer
上的post / put请求的relatedPrimaryField行为一样。关于如何实现这一目标的任何解决方案?
class ProfileSerializer(serializers.ModelSerializer):
current = ProjectSerializer()
class Meta:
model = Profile
fields = ('function', 'current')
答案 0 :(得分:0)
我通常建议的最一致的方法是将所有嵌套序列化程序(在本例中为ProjectSerializer
)标记为read_only,并将id
字段添加为read_only=False
因此,您将在列表/检索和创建/更新之间保持一致。
答案 1 :(得分:0)
正如Linova所提到的,在不使用第三方库的情况下解决此问题的最简单方法是在序列化程序中声明两个单独的字段。您的嵌套序列化程序current
将保持不变,但您可以添加新的PrimaryKeyRelatedField
序列化程序。嵌套的序列化程序应该是只读的,但相关的字段不是只读的。我通常按惯例命名相关字段<field>_id
。
在GET请求中,将返回嵌套的序列化程序和id
字段,但对于PUT或POST请求,只需要指定<field>_id
。
class ProfileSerializer(serializers.ModelSerializer):
current = ProjectSerializer()
current_id = serializers.PrimaryKeyRelatedField(queryset=Projects.objects.all(), source='current')
class Meta:
model = Profile
fields = ('function', 'current', 'current_id')