【问题标题】:Django serializing jsonDjango 序列化 json
【发布时间】:2021-05-11 18:06:39
【问题描述】:

我正在使用 django 构建 API,但遇到了一个问题。
我有一个 UserDetail 模型,它有一个用户模型的外键。

class UserDetail(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    about = models.CharField(max_length=200, default="", blank=True)

我想在一个json中序列化User的信息和UserDetails的信息,这就是我目前正在做的:

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email')


class DetailSerializer(serializers.ModelSerializer):

    user = UserSerializer(required=True)

    class Meta:
        model = UserDetail
        fields = ('user', 'about',)

现在我得到了这个:

{
    "user": {
        "username": "julia",
        "first_name": "antonia",
        "last_name": "uri",
        "email": "as¡¡test@test.test"
    },
    "about": ""
}

但我想从用户那里获取 UserDetail 的信息,而不是反过来(就像我现在正在做的那样),以便我得到这样的信息:

{
    "username": "julia",
        "first_name": "antonia",
        "last_name": "uri",
        "email": "test@test.test",
    "details": {
        "about": ""
    }
}

如果有人能告诉我我做错了什么,我将不胜感激。

谢谢!

编辑
这是我的看法:

#user = User.objects.select_related('userdetail').get(username=username)
        user = User.objects.get(username=username)
        userDetail = UserDetail.objects.get(user=user)

        if request.method == 'GET':
            serializer = DetailSerializer(userDetail)
            return Response(serializer.data)

【问题讨论】:

  • 请添加您的观点

标签: python django django-models django-serializer


【解决方案1】:

你可以这样做:

class DetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserDetail
        fields = ('about',)

class UserSerializer(serializers.ModelSerializer):
    details = DetailSerializer(many=False, source="userdetail")

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'details')

source=userdetail 是您从用户模型实例访问userdetail 的方式

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 2015-03-23
    • 2013-12-05
    • 2011-07-05
    • 2015-02-07
    • 2011-06-30
    • 2011-05-30
    • 2012-03-25
    • 2016-02-27
    相关资源
    最近更新 更多