gpt4 book ai didi

django - 在反向关系上添加序列化程序 - Django Rest Framework

转载 作者:行者123 更新时间:2023-12-03 23:40:02 26 4
gpt4 key购买 nike

我有一个 Cart模型和 CartItem模型。 CartItem型号有 ForeignKeyCart模型。

使用 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 中排除产品,我只会得到一个带有下一个字段的新 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',
)

关于django - 在反向关系上添加序列化程序 - Django Rest Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35285549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com