【问题标题】:DRF response list fieldDRF 响应列表字段
【发布时间】:2018-11-14 08:17:45
【问题描述】:

如何在 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')

models.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-framework response listfield


    【解决方案1】:

    一种可能的解决方案是使用“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]
    

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

    【讨论】:

    • 得到这个错误 AttributeError 'str' object has no attribute 'email'
    • 这就是我的意思,您需要将模型添加到您的问题中。没有那个,我只假设团队用户是具有电子邮件属性的模型。
    • 你能帮我解决问题吗,添加模型和视图
    • 您的模型设计可能不是您想要的,并且超出了在 SO 上的范围。您可能希望团队用户成为模型并添加与团队模型的关系,以便团队中可以有多个用户。
    【解决方案2】:
    class GetTeam(APIView):
    
        def get(self, request, *args, **kwargs):
            teams = models.Team.objects.all()
            return Response(serializers.TeamSerializer(team, many=True).data)
    

    If the field is used to represent a to-many relationship, you should add the many=True flag to the serializer field.

    【讨论】:

      猜你喜欢
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 2021-02-13
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多