【问题标题】:How should I return usernames instead of id inside Django Rest Framework API?我应该如何在 Django Rest Framework API 中返回用户名而不是 id?
【发布时间】:2021-01-14 12:34:48
【问题描述】:

这是我的模型。

class FollowerModelSerializer(ModelSerializer):
    user = CharField(source='slug')

    class Meta:
        model = Profile
        fields = ['user', 'followers']

这是序列化器。

class FollowerModelViewSet(ModelViewSet):
    queryset = Profile.objects.all()
    serializer_class = FollowerModelSerializer
    allowed_methods = ('GET', 'HEAD', 'OPTIONS')

    def list(self, request, *args, **kwargs):
        self.queryset = self.queryset.filter(id=request.user.id)
        return super(FollowerModelViewSet, self).list(request, *args, **kwargs)

这就是 API。

这是回复:

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {
        "user": "pop",
        "followers": [
            1,
            4
        ]
    }
]

问题:它正在返回关注者的 ID。我应该如何让它返回关注者的用户名?

【问题讨论】:

  • 您能否更具体地说明问题所在?请参阅How to Askhelp center
  • @AMC:我认为 OP 希望 followers 成为列表 "followers": ["username1", "username2"]
  • @testuser1: 你能在问题中添加预期输出吗?
  • @WillemVanOnsem 我认为 OP 希望追随者成为“追随者”列表:["username1", "username2"] 我得到了那部分,它只是'不清楚问题或障碍是什么。
  • @WillemVanOnsem 是绝对正确的。这就是我现在所需要的,而不是 ID,我只需要用户名。我已经发布了与此查询对应的所有代码。

标签: python python-3.x django rest class


【解决方案1】:

您可以使用SlugRelatedField [drf-doc]

class FollowerModelSerializer(ModelSerializer):
    user = CharField(source='slug')
    followers = SlugRelatedField(
        slug_field='username',
        many=True,
        read_only=True
    )

    class Meta:
        model = Profile
        fields = ['user', 'followers']

这将因此使用followers 关系中包含的对象的username

【讨论】:

  • 天哪,这就是我所需要的。与蛞蝓相关的领域。我确实为不早点知道这件事而感到愚蠢。非常感谢!
猜你喜欢
  • 2020-07-23
  • 2021-05-07
  • 2018-07-31
  • 1970-01-01
  • 2013-04-09
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多