Python 嵌套Django休息
在Django REST中执行嵌套序列化程序似乎非常简单。 但是我在代码中找不到任何错误。carts没有出现 我跟着 唯一不同的是我使用JSONField。 这应该不是问题Python 嵌套Django休息,python,django,rest,Python,Django,Rest,在Django REST中执行嵌套序列化程序似乎非常简单。 但是我在代码中找不到任何错误。carts没有出现 我跟着 唯一不同的是我使用JSONField。 这应该不是问题 class MailAPIOrderItemSerializer(serializers.ModelSerializer): product = serializers.SerializerMethodField() category = serializers.SerializerMethodField()
class MailAPIOrderItemSerializer(serializers.ModelSerializer):
product = serializers.SerializerMethodField()
category = serializers.SerializerMethodField()
variant = serializers.SerializerMethodField()
class Meta:
model = OrderItem
fields = ('category', 'product', 'variant')
def get_variant(self, obj: OrderItem):
return obj.product.get('level_two')
def get_category(self, obj: OrderItem):
return obj.product.get('service_name')
def get_product(self, obj: OrderItem):
return obj.product.get('product_name')
class MailAPIOrderSerializer(serializers.ModelSerializer):
...
carts = MailAPIOrderItemSerializer(many=True, read_only=True)
class Meta:
model = Order
fields = (
...
'carts'
)
def get_staff_name(self, order: Order):
return order.staff.full_name
class OrderItem(AbstractSoftModelController):
order = models.ForeignKey(Order, related_name='order_items', verbose_name=_('Order'))
product = JSONField(verbose_name=_('Product'))
我的临时解决方案:
马上我正在通过替换
carts=serializers.SerializerMethodField
在我使用的方法中
在模型订单中,您有backref字段Order\u项目,而不是carts。因此,请尝试更改MailAPIOrderSerializer中的字段名:
好啊它起作用了。但是,我要的是手推车,而不是订购物品。如何将订单项目别名为carts?@Sarit尝试指定源参数:carts=MailAPIOrderItemSerializersource='order\u items',many=True,read\u only=True。请参见此处的详细信息:是。我将在阅读后尝试源代码。非常感谢你。
def get_carts(self, order: Order):
qs = order.order_items.all()
serializer = MailAPIOrderItemSerializer(qs, many=True)
return serializer.data
order_items = MailAPIOrderItemSerializer(many=True, read_only=True)
class Meta:
model = Order
fields = (
...
'order_items'
)