Django ManyToMany 出现错误“QuerySet 类型的对象不可 JSON 序列化”

问题描述 投票:0回答:1

我的申请中有这个问题。

Object of type QuerySet is not JSON serializable
事实上,我创建了一个应用程序,其中我们在一个或多个订单中具有多个产品类型的关系。

这是我的代码:

models.py

# model Product
class Products(models.Model):
    product_id = models.AutoField(primary_key=True)
    product_name = models.CharField(max_length=500)
    class Meta:
        db_table ="products"


# model Order
class Orders(models.Model):
    order_id = models.AutoField(primary_key=True)
    order_number = models.CharField(max_length=500)
    supply = models.ForeignKey(Supplies, on_delete = models.CASCADE)
    statut = models.CharField(max_length=500, default="validé")
    date_of_order = models.DateField()
    products = models.ManyToManyField(Products, through='OrderProduct')
    class Meta:
        db_table ="orders"


# model OrderProduct
class OrderProduct(models.Model):
    Order = models.ForeignKey(Orders, on_delete=models.CASCADE)
    product = models.ForeignKey(Products, on_delete=models.CASCADE)
    product_quantity = models.PositiveIntegerField(default=1)
    class Meta:
        db_table ="ordersproducts"

views.py

# OrderGetAllApi
@csrf_exempt
def order_list(request):
    orders = Orders.objects.select_related('supply').all
    # orders = Orders.objects.select_related('products').all()

    order_list = []
    for order in orders:
        order_list.append({
            'order_id': order.order_id,
            'order_number': order.order_number,
            'date_of_order': order.date_of_order,
            'supply_id': order.supply.supply_id,
            'supply_name': order.supply.supply_name,
            'supply_address': order.supply.supply_address,
            'products': order.products.all()
        })
    return JsonResponse(order_list, safe=False)

serializers.py

class OrderProductSerializer(serializers.ModelSerializer):
    product = ProductSerializer()

    class Meta:
        model = OrderProduct
        fields = ['product_id', 'product_name', 'product_quantity']
        # fields = '_all_'


class OrderSerializer(serializers.ModelSerializer):
    supply = SupplySerializer()
    products = OrderProductSerializer(many=True)

    class Meta:
        model=Orders
        fields=('order_id', 'order_number', 'date_of_order', 'statut', 'supply', 'products')

我想获取各自产品的订单列表。 当我在浏览器中输入订单列表(order_list)时 我收到错误

Object of type QuerySet is not JSON serializable
。 如何解决问题并获取其产品的订单列表。

谢谢你

python json django django-rest-framework many-to-many
1个回答
0
投票

您将其传递给 JSONResponse 但它是查询集并且不可序列化。

'products': order.products.all()

您需要将其转换为字典列表或使用序列化器。

© www.soinside.com 2019 - 2024. All rights reserved.