首页 > 解决方案 > DRF 响应列表字段

问题描述

如何在 Django drf 中以数组格式获得响应?我是 python-drf 编程的新手。请帮助解决问题。

我只想要数组格式的 team_users,但现在它返回一个数组,每个字母用引号分隔。

{
    "id": 3,
    "team_name": "team 3",
    "team_icon": "/media/icon/underground_3Dz5sfD.png",
    "team_users": [
        "[",
        "'",
        "s",
        "k",
        "a",
        "r",
        "a",
        "n",
        "7",
        "1",
        "4",
        "@",
        "g",
        "m",
        "a",
        "i",
        "l",
        ".",
        "c",
        "o",
        "m",
        "'",
        ",",
        " ",
        "'",
        "s",
        "a",
        "m",
        "p",
        "l",
        "e",
        "1",
        "2",
        "3",
        "@",
        "g",
        "m",
        "a",
        "i",
        "l",
        ".",
        "c",
        "o",
        "m",
        "'",
        "]"
    ]
}, 

要求的格式是:

    "id": 3,
    "team_name": "team 3",
    "team_icon": "/media/icon/underground_3Dz5sfD.png",
    "team_users": ["first_email", "second_email"]

这是 serializers.py 中的代码

class TeamSerializer(serializers.ModelSerializer):
        team_users = serializers.ListField(child=serializers.EmailField(min_length=0, max_length=100))


        class Meta():
            model=Team
            fields = ('id','team_name', 'team_icon', 'team_users')

模型.py

class Team(models.Model):
    team_name = models.CharField(max_length=255)
    team_icon = models.ImageField()
    team_users = models.EmailField()

在views.py

class GetTeam(APIView):


    def get(self, request, *args, **kwargs):
        data_list = []
        teams = models.Team.objects.all()
        for team in teams:
            data_list.append(serializers.TeamSerializer(team).data)
        return Response(data_list)

标签: django-rest-frameworkresponselistfield

解决方案


一种可能的解决方案是使用“SerializerMethodField”

class TeamSerializer(serializers.ModelSerializer):

    team_users = serializers.SerializerMethodField(read_only=True)

    def get_team_users(self, obj):
        return [x.email for x in obj.team_users]

还取决于您的团队用户模型,但您可以根据自己的需要进行定制。


推荐阅读