" non_field_errors ":["无效数据.期待字典,但得到QuerySet.



我最近开始学习django。在这个时候,我正在使用Django驱动程序集成mongoDB与Django。我已经创建了一个模型,用于保存和映射我的数据对象到mongoDB,但我缺乏关于实现序列化器的知识,在这个阶段,我遇到了一种情况,我已经无法解决,因为2天所以请抛出一些光,帮助我实现它。

来自django REST框架api的错误信息

models.py

from djongo import models
# Create your models here.
class OrderItem(models.Model):

itemDescription = models.TextField(name = "itemDescription")
itemQuantity = models.FloatField(name = "itemQuantity")
itemPrice = models.FloatField(name = "itemPrice")

class Meta:
abstract = True

class Order(models.Model):
email = models.EmailField(primary_key = True, name = "email") 
customerName = models.CharField(max_length=30, help_text="Enter Customer Name", name = "customerName")
customerAddress = models.TextField(help_text="Enter customer's Address", name = "customerAddress")

orderItems = models.ArrayField(
model_container = OrderItem,
)

objects = models.DjongoManager()

serializers.py

from .models import Order, OrderItem
from rest_framework.serializers import ModelSerializer
class OrderItemsSerializer(ModelSerializer):
class Meta:
model = OrderItem
fields = '__all__'
class OrderSerializer(ModelSerializer):
orderItems = OrderItemsSerializer(many=True)
class Meta:
model = Order
fields = "__all__"

views.py

@api_view(['GET'])
def getOrders(request):

orders = Order.objects.values()
serializer = OrderSerializer(data = orders)

if serializer.is_valid():
print("Valid")
return Response(data = serializer.data)
else:
print("invalid")
print(serializer.errors)
return Response(serializer.errors)

,这是我的json数据,我已经存储在我的mongodb订单集合。

[
{
"email": "himanshu@gmail.com",
"customerName": "Himanshu Maiyani",
"customerAddress": "B-4-102, Gadhpur Township",
"orderItems": [
{
"itemDescription": "pencil",
"itemQuantity": 10,
"itemPrice": 35.0
},
{
"itemDescription": "books",
"itemQuantity": 12,
"itemPrice": 600.0
},
{
"itemDescription": "school bag",
"itemQuantity": 1,
"itemPrice": 800.0
}
]
},
{
"email": "jayesh@gmail.com",
"customerName": "Jayesh Maiyani",
"customerAddress": "C-1-103, Gadhpur Township",
"orderItems": [
{
"itemDescription": "watch",
"itemQuantity": 5,
"itemPrice": 5000.0
},
{
"itemDescription": "earphone",
"itemQuantity": 2,
"itemPrice": 995.5
},
{
"itemDescription": "USB cable",
"itemQuantity": 1,
"itemPrice": 100.0
}
]
}
]

请解释一下我不理解的地方。

检查序列化器是否有效没有意义。您在这里使用它将对象的查询集转换为序列化的数据,而不是其他方式。

你用:

序列化数据
@api_view(['GET'])
def get_orders(request):
orders = Order.objects.all()  # 🖘 no .values()
serializer = OrderSerializer(orders, many=True)
return Response(serializer.data)

您不应该使用.values(…),因为这会破坏模型层中的逻辑并只返回字典。


注意:函数通常以snake_case书写,而不是以PascalCase书写建议将函数重命名为get_orders,而不是getOrders

最新更新