【问题标题】:Django RestFramework - Optional Nested serializer ID on POST, Detail on GET?Django Rest Framework - POST 上的可选嵌套序列化程序 ID,GET 上的详细信息?
【发布时间】:2018-02-28 12:33:22
【问题描述】:

我遇到了以下问题。假设我有一个简单的 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 字段上发布/获取 Profile.id,但我们真的想要来自该字段的附加信息,而不仅仅是 ID。

有没有办法做到这一点?例如,我们在哪里只在 POST 上提供 Profile.PK 并在 GET 请求上获取整个嵌套的序列化信息?

【问题讨论】:

标签: django django-rest-framework


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多