我有一个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',
)