我最近開始學習 django。而此時我正在使用 djongo 驅動程式將 mongoDB 與 Django 集成。我已經創建了一個模型,用于保存我的資料物件并將其映射到 mongoDB,但我缺乏關于實作序列化程式的知識,在這個階段我遇到了一種情況,我從 2 天以來一直無法解決,所以請說明一下并幫助我實作它。
來自 django REST framework api 的錯誤訊息
模型.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()
序列化程式.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__"
視圖.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)
這是我存盤在我的 mongodb 訂單集合中的 json 資料。
[
{
"email": "[email protected]",
"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": "[email protected]",
"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
}
]
}
]
請解釋我缺乏理解的地方。
uj5u.com熱心網友回復:
檢查序列化程式是否有效是沒有意義的。您在這里使用它來將物件的查詢集轉換為序列化資料,而不是相反。
您使用以下方法序列化資料:
@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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/494684.html
