Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套Django休息_Python_Django_Rest - Fatal编程技术网

Python 嵌套Django休息

Python 嵌套Django休息,python,django,rest,Python,Django,Rest,在Django REST中执行嵌套序列化程序似乎非常简单。 但是我在代码中找不到任何错误。carts没有出现 我跟着 唯一不同的是我使用JSONField。 这应该不是问题 class MailAPIOrderItemSerializer(serializers.ModelSerializer): product = serializers.SerializerMethodField() category = serializers.SerializerMethodField()

在Django REST中执行嵌套序列化程序似乎非常简单。 但是我在代码中找不到任何错误。carts没有出现 我跟着 唯一不同的是我使用JSONField。 这应该不是问题

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'
    )