Django RestFramework - POST上的可选嵌套序列化程序ID,GET上的详细信息?

时间:2018-02-28 12:33:23

标签: django django-rest-framework

我遇到了以下问题。假设我有一个简单的Profile Serializer,它在DevelopmentPLanItemSerializer中用作嵌套serializer,如下所示:

class SimpleProfileSerializer(serializers.ModelSerializer):
    profile_image = serializers.SerializerMethodField()

    class Meta:
        model = um.Profile
        fields = ('id', 'name', 'profile_image')

    def profile_image(self, obj):
        return obj.profile_image_url



class DevelopmentPlanItemSerializer(serializers.ModelSerializer):
    id = serializers.ModelField(
        model_field=dp.DevelopmentPlanItem()._meta.get_field('id'),
        required=False,
        allow_null=True
    )
    name = serializers.CharField(required=False, allow_null=True)        
    profile = SimpleProfileSerializer(required=False, allow_null=True)

    class Meta:
        model = dp.DevelopmentPlanItem
        fields = ('id', 'title', 'name', 'profile')

现在,我使用required=False, allow_null=True推销'个人资料'字段,因为此字段是可选的。但是,当我保存时,我仍然会收到错误,因为SimpleProfileSerializer中的字段不允许为空。我可以通过删除嵌套的序列化程序来解决这个问题,这样我只能在DevelopmentPlanItemSerialzer.profile字段上POST / GET一个Profile.id,但我们真的想要这个字段的附加信息,而不仅仅是ID。

有没有办法实现这个目标?例如,我们在POST上只提供Profile.PK并在GET请求中获取整个嵌套的序列化信息?

1 个答案:

答案 0 :(得分:0)

我在他的评论中使用了neverwalkaloner链接的链接/方法解决了,如果有人遇到类似的问题我建议检查出来!