代码之家  ›  专栏  ›  技术社区  ›  Aran Freel

Django Rest Framework传递给ModelSerializer的参数的含义是什么?

  •  0
  • Aran Freel  · 技术社区  · 6 年前

    我正试图理解传递给 serializers.ListUserSerializer() . 我明白 last_five 是要通过序列化程序返回的数据。

    我不明白的是,这种模式在哪里有一对多的关系。通过阅读DRF文档, many=True 当模型具有对多关系时传递。但是,我不明白这是如何指定多对多关系的。我看到了一些可能性。

    • 当前用户和所有其他用户之间的一对多
    • 最后五个 用户查询

    context 争论。我认为这只是对api的请求调用,包含在客户端的有效负载中。

    其代码基础是 here

        class ExploreUsers(APIView):
    
            def get(self, request, format=None):
    
                # the "-date_joined" specifies descending order vs "date_joined"
                last_five = models.User.objects.all().order_by('-date_joined')[:5]
    
                # many=True provides to-many relationship from one user to many users
                serializer = serializers.ListUserSerializer(
                    last_five, many=True, context={"request": request})
    
                return Response(data=serializer.data, status=status.HTTP_200_OK)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   JPG    6 年前

    many = True
    通过设置 many=True 你告诉DRF 传递的对象包含多个项(项列表) 所以DRF需要用serializer类(和 serializer.data 将是一个列表)

    queryset 这是一个 list 类对象(模型类对象列表)

    context
    上下文 dict ,它将传递给 serializer 你可以访问 context data 序列化程序中的任何位置 self.context['key']

    例子

    # serializer.py
    class MySerializer(serializers.Serializer):
        name = serializers.CharField()
        age = serializers.SerializerMethodField(required=False)
    
        def get_age(self, age):
            if self.context['age']:
                return self.context['age']
            return None
    
    
    # usage
    sample_data = {"name": "your name"}
    serializer = MySerializer(data=sample_data, context={'age': 12})
    serializer.is_valid(True)
    print(serializer.data)