我有一个Cart模型和一个CartItem模型。 CartItem模型具有ForeignKey模型的Cart

使用Django Rest Framework,我有一个 View ,API用户可以在其中显示Cart,显然我想将CartItem包括在响应中。

我这样设置我的序列化器:

class CartSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    cartitem_set = CartItemSerializer(read_only=True)
    class Meta:
        model = Cart
        depth = 1
        fields = (
            'id',
            'user',
            'date_created',
            'voucher',
            'carrier',
            'currency',
            'cartitem_set',
        )

我的问题是第二行cartitem_set = CartItemSerializer(read_only=True)

我得到AttributeErrors说'RelatedManager' object has no attribute 'product'。 (“product”是CartItem模型中的一个字段。如果我从CartItemSerializer中排除product,我只会在下一个字段中得到一个新的AttributeError,依此类推。无论我在序列化器中只保留1个还是所有字段,我都会得到一个错误。

我的猜测是,由于某种原因,Django REST Framework不支持添加序列化器来逆转此类关系。我错了吗?我应该怎么做?

聚苯乙烯

之所以要使用CartItemSerializer()是因为我想控制响应中显示的内容。

最佳答案

艾哈迈德·霍斯尼(Ahmed Hosny)的回答正确。它要求将many参数设置为True才能起作用。

因此,CartSerializer的最终版本如下所示:

class CartSerializer(serializers.ModelSerializer):
    cartitem_set = CartItemSerializer(read_only=True, many=True) # many=True is required
    class Meta:
        model = Cart
        depth = 1
        fields = (
            'id',
            'date_created',
            'voucher',
            'carrier',
            'currency',
            'cartitem_set',
        )

10-07 15:57