代码之家  ›  专栏  ›  技术社区  ›  MhmdRizk

向序列化程序添加主键

  •  0
  • MhmdRizk  · 技术社区  · 7 年前

    我想在返回的列表中添加id字段,它是每个对象的主键

    在my models.py中:

    class Category(models.Model):
         name = models.CharField(max_length=200)
    

    在my serializers.py中:

    class CategorySerializer(serializers.ModelSerializer):
        class Meta:
            model = Category
            fields = ('id', 'name')
    

    在my views.py中:

    class ListCategoriesView(generics.ListAPIView):
    """
    Provides a get method handler.
    """
    
    serializer_class = CategorySerializer
    
    
    def get(self, request, *args, **kwargs):
        token = request.META.get("HTTP_TOKEN","")
        if not token:
    
            """ do some action here """
    
        if not UserAccess.objects.filter(accessToken=token).exists():
    
            """ do some action here """
    
        else:
            serialized_categories = []
            all_categories = Category.objects.all()
            for category in all_categories:
              """ I'm filling the object here with the id , and the name """
                serialized_item = CategorySerializer(data={
                        "id": category.id,
                        "name": category.name
                    })
                if serialized_item.is_valid():
                    serialized_categories.append(serialized_item.data)
            return Response(
                data=serialized_categories,
                status=status.HTTP_200_OK
            )
    

    我得到以下回复:

    enter image description here

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  2
  •   lostbard    7 年前

    只需要让视图来做这项工作。

    class ListCategoriesView(generics.ListAPIView):
        serializer_class = CategorySerializer
        queryset = Category.objects.all()
    
        def list(self, request, *args, **kwargs)
            token = request.META.get("HTTP_TOKEN","")
            if not token:
                """ do some action here """
            elif not UserAccess.objects.filter(accessToken=token).exists():
                """ do some action here """
            else:
                return super().list(request, *args, **kwargs)
    
    推荐文章