5.5.drf的modelserializer

serializer

goods/serializer.py

class GoodsCategorySerializer(serializers.Serializer):
    name = serializers.CharField(default='', max_length=30)
    code = serializers.CharField(default='', max_length=30)
    desc = serializers.CharField(default='', max_length=200)
    category_type = serializers.IntegerField()

    def create(self, validated_data):
        return GoodsCategory.objects.create(**validated_data)

goods/views.py

class GoodsCategoryView(APIView):
    """
    获取商品类型列表
    """

    def get(self, request, format=None):
        category = GoodsCategory.objects.all()[:10]
        serializer = GoodsCategorySerializer(category, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = GoodsCategorySerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

goods/urls.py

使用ModelSerializer简化Serializer

goods/serializer.py

若需要取出所有字段使用fields = '__all__'

Serializer嵌套

结果

总所周知,drf中的serializer会为图片的url自动补全域名,但当Serializer嵌套Serializer时,图片的url自动补全域名将失效,若要开启需手动设置context={'request': self.context['request']}

使用场景

何时适用Serializer?何时使用ModelSerializer?

Model中要求某字段必须存在,可Serializer中却不需要时,使用Serializer

Last updated

Was this helpful?