本文介紹了Python:Django:如何根據 order_id 在 order_data 中獲取 order_detail_data?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
class Order_ListAPIView(APIView):def get(self,request,format=None):總數據=[]如果 request.method == 'GET':cur,conn = 連接()order_query = ''' SELECT * FROM 訂單'''order_detail_query = ''' SELECT * FROM order_details'''以 conn.cursor(MySQLdb.cursors.DictCursor) 作為游標:cursor.execute(order_detail_query)order_detail_result = cursor.fetchall()order_detail_data = 列表(order_detail_result)# 打印(order_detail_data)cursor.execute(order_query)order_result = cursor.fetchall()訂單數據 = 列表(訂單結果)dic = {}對于 order_detail_data 中的 d:如果 d['order_id'] 不在 dic 中:dic[d['order_id']] = []dic[d['order_id']].append(d)order_data.append(dic)totalData.append({order_data":order_data, })返回響應({totalData":totalData,},status=status.HTTP_200_OK)別的:返回響應(狀態=狀態.HTTP_400_BAD_REQUEST)
<塊引用>
輸出:
<代碼>{總數據":[{訂單數據":[{order_id":1,user_id":4,billing_shipping_id":5,payment_method_id":1,delivery_id":2,txnid":584ffb7fd622eca10a6d",order_no":1-1583152683-0005",delivery_amount":0.0,折扣金額":0.0,order_total":1.0,payment_status":已支付",created_datetime":2020-03-02T18:09:27",updated_datetime":2020-03-02T12:39:27",狀態":活動",mihpayid":9956109007",payuMoneyId":306043618"},{order_id":2,用戶 ID":11,billing_shipping_id":19,payment_method_id":2,delivery_id":2,txnid":",order_no":1-1583152785-0010",delivery_amount":0.0,折扣金額":0.0,order_total":1.0,payment_status":未付",created_datetime":2020-03-02T18:09:45",updated_datetime":2020-03-02T12:39:45",狀態":活動",mihpayid":",payuMoneyId":"},{order_id":3,user_id":12,billing_shipping_id":20,payment_method_id":1,delivery_id":2,txnid":83e066ca75437f3d05b0",order_no":2-1583152964-0019",delivery_amount":0.0,折扣金額":0.0,order_total":2.0,payment_status":已支付",created_datetime":2020-03-02T18:13:43",updated_datetime":2020-03-02T12:43:43",狀態":活動",mihpayid":9956136979",payuMoneyId":306044826"},{1":[{order_detail_id":1,order_id":1,user_id":4,product_id":229,product_size_id":982,size_id":2,數量":1,產品價格":1.0,order_item_status":已放置",last_status_datatime":2020-03-02T18:09:27",反饋":",created_datetime":2020-03-02T18:09:27",updated_datetime":2020-03-02T12:39:27",狀態":活動"}],2":[{order_detail_id":2,order_id":2,用戶 ID":11,product_id":229,product_size_id":981,size_id":1,數量":1,產品價格":1.0,order_item_status":已取消",last_status_datatime":2020-03-02T18:10:19",反饋":0",created_datetime":2020-03-02T18:09:45",updated_datetime":2020-03-02T12:39:45",狀態":活動"}],3":[{order_detail_id":3,order_id":3,user_id":19,product_id":229,product_size_id":982,size_id":2,數量":1,產品價格":1.0,order_item_status":已放置",last_status_datatime":2020-03-02T18:32:07",反饋":",created_datetime":2020-03-02T18:32:07",updated_datetime":2020-03-02T13:02:07",狀態":活動"},]}]}]}
<塊引用>
我想要的是:
<代碼>{總數據":[{訂單數據":[{order_id":1,user_id":4,billing_shipping_id":5,payment_method_id":1,delivery_id":2,txnid":584ffb7fd622eca10a6d",order_no":1-1583152683-0005",delivery_amount":0.0,折扣金額":0.0,order_total":1.0,payment_status":已支付",created_datetime":2020-03-02T18:09:27",updated_datetime":2020-03-02T12:39:27",狀態":活動",mihpayid":9956109007",payuMoneyId":306043618",1":[{order_detail_id":1,order_id":1,user_id":4,product_id":229,product_size_id":982,size_id":2,數量":1,產品價格":1.0,order_item_status":已放置",last_status_datatime":2020-03-02T18:09:27",反饋":",created_datetime":2020-03-02T18:09:27",updated_datetime":2020-03-02T12:39:27",狀態":活動"],}},{order_id":2,用戶 ID":11,billing_shipping_id":19,payment_method_id":2,delivery_id":2,txnid":",order_no":1-1583152785-0010",delivery_amount":0.0,折扣金額":0.0,order_total":1.0,payment_status":未付",created_datetime":2020-03-02T18:09:45",updated_datetime":2020-03-02T12:39:45",狀態":活動",mihpayid":",payuMoneyId":",2":[{order_detail_id":2,order_id":2,用戶 ID":11,product_id":229,product_size_id":981,size_id":1,數量":1,產品價格":1.0,order_item_status":已取消",last_status_datatime":2020-03-02T18:10:19",反饋":0",created_datetime":2020-03-02T18:09:45",updated_datetime":2020-03-02T12:39:45",狀態":活動"],}},{order_id":3,user_id":12,billing_shipping_id":20,payment_method_id":1,delivery_id":2,txnid":83e066ca75437f3d05b0",order_no":2-1583152964-0019",delivery_amount":0.0,折扣金額":0.0,order_total":2.0,payment_status":已支付",created_datetime":2020-03-02T18:13:43",updated_datetime":2020-03-02T12:43:43",狀態":活動",mihpayid":9956136979",payuMoneyId":306044826",3":[{order_detail_id":3,order_id":3,user_id":19,product_id":229,product_size_id":982,size_id":2,數量":1,產品價格":1.0,order_item_status":已放置",last_status_datatime":2020-03-02T18:32:07",反饋":",created_datetime":2020-03-02T18:32:07",updated_datetime":2020-03-02T13:02:07",狀態":活動"]},]}]}
<塊引用>
我使用原始查詢從數據庫中直接獲取數據而不是ORM.我想按照 order_data 在 order_data 中獲取 order_detail_dataorder_id,根據上述詳細信息.
我正在嘗試解決這個問題,但我沒有得到任何可以解決這個問題的可能答案.如果有人能幫我解決我正在尋找的問題,那就太好了.非常感謝您!
解決方案
經過 16 個小時的努力,我找到了解決方案:
class Order_ListAPIView(APIView):def get(self,request,format=None):總數據=[]如果 request.method == 'GET':cur,conn = 連接()order_query = ''' SELECT * FROM 訂單'''order_detail_query = ''' SELECT * FROM order_details LEFT JOIN 訂單 ON order_details.order_detail_id = orders.order_id '''以 conn.cursor(MySQLdb.cursors.DictCursor) 作為游標:cursor.execute(order_detail_query)order_detail_result = cursor.fetchall()order_detail_data = 列表(order_detail_result)# 打印(order_detail_data)cursor.execute(order_query)order_result = cursor.fetchall()訂單數據 = 列表(訂單結果)dic = {}def merge_order_data_and_detail(order_data, order_detail_data):對于 order_detail_data 中的 d:如果 d['order_id'] 不在 dic 中:dic[d['order_id']] = []dic[d['order_id']].append(d)對于 o 在 order_data 中:如果 o['order_id'] 在 dic 中:o['order_detail_data'] = dic[o['order_id']]merge_order_data_and_detail(order_data,order_detail_data)totalData.append({"order_data":order_data, })返回響應({"totalData":totalData,},status=status.HTTP_200_OK)別的:返回響應(狀態=狀態.HTTP_400_BAD_REQUEST)
class Order_ListAPIView(APIView):
def get(self,request,format=None):
totalData=[]
if request.method == 'GET':
cur,conn = connection()
order_query = ''' SELECT * FROM orders'''
order_detail_query = ''' SELECT * FROM order_details'''
with conn.cursor(MySQLdb.cursors.DictCursor) as cursor:
cursor.execute(order_detail_query)
order_detail_result = cursor.fetchall()
order_detail_data = list(order_detail_result)
# print(order_detail_data)
cursor.execute(order_query)
order_result = cursor.fetchall()
order_data = list(order_result)
dic = {}
for d in order_detail_data:
if d['order_id'] not in dic:
dic[d['order_id']] = []
dic[d['order_id']].append(d)
order_data.append(dic)
totalData.append({"order_data":order_data, })
return Response({"totalData":totalData,},status=status.HTTP_200_OK)
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
output:
{
"totalData": [
{
"order_data": [
{
"order_id": 1,
"user_id": 4,
"billing_shipping_id": 5,
"payment_method_id": 1,
"delivery_id": 2,
"txnid": "584ffb7fd622eca10a6d",
"order_no": "1-1583152683-0005",
"delivery_amount": 0.0,
"discount_amount": 0.0,
"order_total": 1.0,
"payment_status": "Paid",
"created_datetime": "2020-03-02T18:09:27",
"updated_datetime": "2020-03-02T12:39:27",
"status": "Active",
"mihpayid": "9956109007",
"payuMoneyId": "306043618"
},
{
"order_id": 2,
"user_id": 11,
"billing_shipping_id": 19,
"payment_method_id": 2,
"delivery_id": 2,
"txnid": "",
"order_no": "1-1583152785-0010",
"delivery_amount": 0.0,
"discount_amount": 0.0,
"order_total": 1.0,
"payment_status": "Unpaid",
"created_datetime": "2020-03-02T18:09:45",
"updated_datetime": "2020-03-02T12:39:45",
"status": "Active",
"mihpayid": "",
"payuMoneyId": ""
},
{
"order_id": 3,
"user_id": 12,
"billing_shipping_id": 20,
"payment_method_id": 1,
"delivery_id": 2,
"txnid": "83e066ca75437f3d05b0",
"order_no": "2-1583152964-0019",
"delivery_amount": 0.0,
"discount_amount": 0.0,
"order_total": 2.0,
"payment_status": "Paid",
"created_datetime": "2020-03-02T18:13:43",
"updated_datetime": "2020-03-02T12:43:43",
"status": "Active",
"mihpayid": "9956136979",
"payuMoneyId": "306044826"
},
{
"1": [
{
"order_detail_id": 1,
"order_id": 1,
"user_id": 4,
"product_id": 229,
"product_size_id": 982,
"size_id": 2,
"qty": 1,
"product_price": 1.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-03-02T18:09:27",
"feedback": "",
"created_datetime": "2020-03-02T18:09:27",
"updated_datetime": "2020-03-02T12:39:27",
"status": "Active"
}
],
"2": [
{
"order_detail_id": 2,
"order_id": 2,
"user_id": 11,
"product_id": 229,
"product_size_id": 981,
"size_id": 1,
"qty": 1,
"product_price": 1.0,
"order_item_status": "Cancelled",
"last_status_datatime": "2020-03-02T18:10:19",
"feedback": "0",
"created_datetime": "2020-03-02T18:09:45",
"updated_datetime": "2020-03-02T12:39:45",
"status": "Active"
}
],
"3": [
{
"order_detail_id": 3,
"order_id": 3,
"user_id": 19,
"product_id": 229,
"product_size_id": 982,
"size_id": 2,
"qty": 1,
"product_price": 1.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-03-02T18:32:07",
"feedback": "",
"created_datetime": "2020-03-02T18:32:07",
"updated_datetime": "2020-03-02T13:02:07",
"status": "Active"
},
]
}
]
}
]
}
what i want is:
{
"totalData": [
{
"order_data": [
{
"order_id": 1,
"user_id": 4,
"billing_shipping_id": 5,
"payment_method_id": 1,
"delivery_id": 2,
"txnid": "584ffb7fd622eca10a6d",
"order_no": "1-1583152683-0005",
"delivery_amount": 0.0,
"discount_amount": 0.0,
"order_total": 1.0,
"payment_status": "Paid",
"created_datetime": "2020-03-02T18:09:27",
"updated_datetime": "2020-03-02T12:39:27",
"status": "Active",
"mihpayid": "9956109007",
"payuMoneyId": "306043618",
"1": [
{
"order_detail_id": 1,
"order_id": 1,
"user_id": 4,
"product_id": 229,
"product_size_id": 982,
"size_id": 2,
"qty": 1,
"product_price": 1.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-03-02T18:09:27",
"feedback": "",
"created_datetime": "2020-03-02T18:09:27",
"updated_datetime": "2020-03-02T12:39:27",
"status": "Active"
],}
},
{
"order_id": 2,
"user_id": 11,
"billing_shipping_id": 19,
"payment_method_id": 2,
"delivery_id": 2,
"txnid": "",
"order_no": "1-1583152785-0010",
"delivery_amount": 0.0,
"discount_amount": 0.0,
"order_total": 1.0,
"payment_status": "Unpaid",
"created_datetime": "2020-03-02T18:09:45",
"updated_datetime": "2020-03-02T12:39:45",
"status": "Active",
"mihpayid": "",
"payuMoneyId": "",
"2": [
{
"order_detail_id": 2,
"order_id": 2,
"user_id": 11,
"product_id": 229,
"product_size_id": 981,
"size_id": 1,
"qty": 1,
"product_price": 1.0,
"order_item_status": "Cancelled",
"last_status_datatime": "2020-03-02T18:10:19",
"feedback": "0",
"created_datetime": "2020-03-02T18:09:45",
"updated_datetime": "2020-03-02T12:39:45",
"status": "Active"
],
}
},
{
"order_id": 3,
"user_id": 12,
"billing_shipping_id": 20,
"payment_method_id": 1,
"delivery_id": 2,
"txnid": "83e066ca75437f3d05b0",
"order_no": "2-1583152964-0019",
"delivery_amount": 0.0,
"discount_amount": 0.0,
"order_total": 2.0,
"payment_status": "Paid",
"created_datetime": "2020-03-02T18:13:43",
"updated_datetime": "2020-03-02T12:43:43",
"status": "Active",
"mihpayid": "9956136979",
"payuMoneyId": "306044826",
"3": [
{
"order_detail_id": 3,
"order_id": 3,
"user_id": 19,
"product_id": 229,
"product_size_id": 982,
"size_id": 2,
"qty": 1,
"product_price": 1.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-03-02T18:32:07",
"feedback": "",
"created_datetime": "2020-03-02T18:32:07",
"updated_datetime": "2020-03-02T13:02:07",
"status": "Active"
]
},
]
}
]
}
i am direct fetching data using raw query from databases instead of ORM. i want to get order_detail_data inside order_data as per order_id, per above details.
i am trying to solve this problem, but i didn't get any possible answer which could solve this problem. It would be great if anyone could help me out for what i am looking for. Advance thank you so much!.
解決方案
After 16 hours struggle i found solution:
class Order_ListAPIView(APIView):
def get(self,request,format=None):
totalData=[]
if request.method == 'GET':
cur,conn = connection()
order_query = ''' SELECT * FROM orders'''
order_detail_query = ''' SELECT * FROM order_details LEFT JOIN orders ON order_details.order_detail_id = orders.order_id '''
with conn.cursor(MySQLdb.cursors.DictCursor) as cursor:
cursor.execute(order_detail_query)
order_detail_result = cursor.fetchall()
order_detail_data = list(order_detail_result)
# print(order_detail_data)
cursor.execute(order_query)
order_result = cursor.fetchall()
order_data = list(order_result)
dic = {}
def merge_order_data_and_detail(order_data, order_detail_data):
for d in order_detail_data:
if d['order_id'] not in dic:
dic[d['order_id']] = []
dic[d['order_id']].append(d)
for o in order_data:
if o['order_id'] in dic:
o['order_detail_data'] = dic[o['order_id']]
merge_order_data_and_detail(order_data, order_detail_data)
totalData.append({"order_data":order_data, })
return Response({"totalData":totalData,},status=status.HTTP_200_OK)
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
這篇關于Python:Django:如何根據 order_id 在 order_data 中獲取 order_detail_data?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!