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

问题描述 投票:0回答:1

我遇到了以下问题。假设我有一个简单的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推销'profile'字段,因为这个字段是可选的。但是,当我保存时,我仍然会收到错误,因为SimpleProfileSerializer中的字段不允许为空。我可以通过删除嵌套的序列化程序来解决这个问题,这样我只能在DevelopmentPlanItemSerialzer.profile字段上POST / GET一个Profile.id,但我们真的想要这个字段的附加信息,而不仅仅是ID。

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

django django-rest-framework
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.