【问题标题】:Django serializer field not workingDjango 序列化程序字段不起作用
【发布时间】:2018-04-30 04:35:35
【问题描述】:

虽然我查看了提出的问题,但我没有找到解决方案...

当我使用这个序列化器时:

class MessageSerializer(ModelSerializer):
    sender = UserMobileSerializer(read_only=True)

    class Meta:
        model = Messages
        fields = '__all__'

我得到这样的东西:

{
    "id": 62,
    "sender": {
        "pk": 12,
        "email": "john@gmail.com",
        "full_name": "John",
        "profile_photo": null
    },
    "created_at": "2018-04-29T00:54:50.437662",
    "message": "sdkjnasljdhkajsjdlasdasda",
    "read_at": false,
    "target": 18
}

我希望target 字段类似于sender,即:显示完整的用户信息,而不仅仅是ID。

我尝试添加这一行:target = UserMobileSerializer(),但我仍然只得到输出中的 ID。我也尝试了target = UserMobileSerializer(read_only=True),但没有任何改变。

【问题讨论】:

    标签: django api django-rest-framework django-serializer


    【解决方案1】:

    您没有将定义的字段添加到序列化程序的Meta 中的fields。试试这个:

    class MessageSerializer(ModelSerializer):
        sender = UserMobileSerializer(read_only=True)
    
        class Meta:
            model = Messages
            fields = ('your', 'fields', 'sender')
    

    编辑:您也需要序列化 ​​target。像这样:

    class TargetSerializer(ModelSerializer):
        class Meta:
            model = Target
            fields = ('id', 'title')  # Add fields you want to get in the response.
    
    
    class MessageSerializer(ModelSerializer):
        target = TargetSerializer(read_only=True)  # You should have TargetSerializer defined
        sender = UserMobileSerializer(read_only=True)
    
        class Meta:
            model = Messages
            fields = ('your', 'fields', 'target', 'sender')
    

    【讨论】:

    • 更新了我的答案。
    • 感谢您的回答,但是 TargetSerializer 内部应该是目标必须来自用户模型?
    • TargetSerializer 应该是一个单独的序列化程序,ModelSerializer 在您的情况下。您可以将其设置为要在响应中获得fields。我在我的答案中添加和示例。
    猜你喜欢
    • 1970-01-01
    • 2015-02-27
    • 2023-03-24
    • 2023-03-18
    • 2021-11-08
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多