"non_field_errors": ["Неверные данные. Ожидался словарь, а получился QuerySet." ] проблема с сериализатором или моделью от djongo
Недавно я начал изучать django. И в данный момент я работаю над интеграцией mongoDB с Django с помощью драйвера djongo. Я создал модель для сохранения и отображения моих объектов данных в mongoDB, но мне не хватает знаний о реализации сериализаторов, и на данном этапе я столкнулся с одной ситуацией, которую не могу решить уже 2 дня, поэтому, пожалуйста, пролейте свет и помогите мне ее реализовать.
сообщение об ошибке от django REST framework 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