我的申请中有这个问题。
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
。
如何解决问题并获取其产品的订单列表。
谢谢你
您将其传递给 JSONResponse 但它是查询集并且不可序列化。
'products': order.products.all()
您需要将其转换为字典列表或使用序列化器。