"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.

Вернуться на верх