1

我有一个带有 ArrayField 的模型,称为“参与者”。

由于 postgress 的 ArrayField 的限制,我不能让数组成为用户列表。因此,我将用户名作为字符串存储在数组中。

现在我想序列化用户 ID 和用户名

class ConversationSerializer(serializers.ModelSerializer):
    class Meta:
        model = c.Conversation
        lookup_field = 'uid'
        fields = (
          'uid',
          'participants',
          'archived',
        )

无论如何我可以返回参与者的用户 ID 而不是字符串?因此,而不是以下结果:

{
    "uid": "dd51b07d-06f2-481a-b68d-fa18e9959392",
    "participants": [
        "userJohn", "userDave"
    ],
    "archived": false
}

我可以获得用户模型字段:

{
    "uid": "dd51b07d-06f2-481a-b68d-fa18e9959392",
    "participants": [
        { 
            'username': 'userJohn',
             'id': 4,
        },
        { 
            'username': 'userDave',
             'id': 5,
        }

    ],
    "archived": false
}
4

1 回答 1

1

serializermethodfield可以提供帮助,如果您使用标准用户模型,您可以尝试:

class ConversationSerializer(serializers.ModelSerializer):
    participants = serializers.SerializerMethodField()
    class Meta:
        model = c.Conversation
        lookup_field = 'uid'
        fields = (
          'uid',
          'participants',
          'archived',
        )

    def get_participants(self, obj):
         users = User.objects.filter(username__in=obj.participants)
         return users.values('id', 'username')

在serializermethodfield中读取的更多详细信息

于 2017-11-22T17:57:50.693 回答