DjangoRestFrameWork从另一个模型过滤一个模型

时间:2017-11-22 17:37:11

标签: django django-rest-framework django-postgresql

我有一个名为“参与者”的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
}

1 个答案:

答案 0 :(得分: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

中读取的更多deatails