Python Django:如何根据订单id获取订单详细信息数据
输出: 我想要什么: 我想在订单数据中包含订单详细信息,如订单id所示: 我使用原始查询直接从 数据库而不是ORM。我想根据获取订单数据中的订单详细信息 订单号Python Django:如何根据订单id获取订单详细信息数据,python,mysql,django-rest-framework,Python,Mysql,Django Rest Framework,输出: 我想要什么: 我想在订单数据中包含订单详细信息,如订单id所示: 我使用原始查询直接从 数据库而不是ORM。我想根据获取订单数据中的订单详细信息 订单号 我试图解决这个问题,但我没有得到任何可能解决这个问题的答案。如果有人能帮我找到我想要的东西,那就太好了。非常感谢如果使用原始查询,则只需合并数据。这样应该行得通 { "totalData": [ { "order_data": [ {
我试图解决这个问题,但我没有得到任何可能解决这个问题的答案。如果有人能帮我找到我想要的东西,那就太好了。非常感谢如果使用原始查询,则只需合并数据。这样应该行得通
{
"totalData": [
{
"order_data": [
{
"order_id": 1,
"user_id": 5,
"billing_shipping_id": 1,
"payment_method_id": 2,
"delivery_id": 2,
"txnid": "",
"order_no": "0822-1582695084-0006",
"delivery_amount": 0.0,
"discount_amount": 570.0,
"order_total": 2280.0,
"payment_status": "Unpaid",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active",
"mihpayid": "",
"payuMoneyId": "",
"order_detail_data": [{
"order_detail_id": 1,
"order_id": 1,
"user_id": 5,
"product_id": 202,
"product_size_id": 867,
"size_id": 1,
"qty": 1,
"product_price": 2850.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-02-26T11:01:24",
"feedback": "",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active"
}],
},
{
"order_id": 2,
"user_id": 5,
"billing_shipping_id": 1,
"payment_method_id": 2,
"delivery_id": 2,
"txnid": "",
"order_no": "0822-1582695084-0007",
"delivery_amount": 0.0,
"discount_amount": 570.0,
"order_total": 2280.0,
"payment_status": "Unpaid",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active",
"mihpayid": "",
"payuMoneyId": "",
"order_detail_data": [{
"order_detail_id": 2,
"order_id": 2,
"user_id": 5,
"product_id": 202,
"product_size_id": 867,
"size_id": 1,
"qty": 1,
"product_price": 2850.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-02-26T11:01:24",
"feedback": "",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active"
}], },
# and so on...
],
},
],
"order_detail_data": [
{
"order_detail_id": 1,
"order_id": 1,
"user_id": 5,
"product_id": 202,
"product_size_id": 867,
"size_id": 1,
"qty": 1,
"product_price": 2850.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-02-26T11:01:24",
"feedback": "",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active"
},
],
},
],
}
结果:
def merge_order_data_and_detail(orders, details):
"""Group details by order_id and merge it in orders."""
# create dictionary key:order_id value:[order_detail_data]
dic = {}
for d in details:
if d['order_id'] not in dic:
dic[d['order_id']] = []
dic[d['order_id']].append(d)
# iterate orders and add details
for o in orders:
if o['order_id'] in dic:
o['order_detail_data'] = dic[o['order_id']]
orders = [
{
"order_id": 1,
"user_id": 5
},
{
"order_id": 2,
"user_id": 50
}
]
details = [
{
"order_detail_id": 1,
"order_id": 1,
"user_id": 5,
"product_id": 202
},
{
"order_detail_id": 2,
"order_id": 1,
"user_id": 5,
"product_id": 203
},
{
"order_detail_id": 3,
"order_id": 2,
"user_id": 50,
"product_id": 402
},
{
"order_detail_id": 4,
"order_id": 2,
"user_id": 50,
"product_id": 403
}
]
merge_order_data_and_detail(orders, details)
print(orders)
我删除了很多orders和details属性,只是为了简化测试
我不知道全部情况,但是如果您还没有使用Django模型,那么应该考虑使用它。这是充分利用框架潜力的途径
希望有帮助。你能证明你自己在解决这个问题上做了什么吗?@anonymoususer你可以重新检查你的代码,你可以自己解决,这很简单,否则我们会在你做不到的时候帮助你!你能将你的模型添加到帖子中吗?我没有任何模型,因为我使用的是原始查询,而不是ORM@cabesuo。你找到解决方案了吗@Mehaparekh您的输入数据是什么?您在链接中提到的预期输出是答案函数的结果,您只是缺少了详细信息的name属性,如果字典中没有键,您就不能有值。。我在预期结果中遗漏了什么?非常感谢。我真的很感激@卡贝苏格兰德,帮你!
{
"totalData": [
{
"order_data": [
{
"order_id": 1,
"user_id": 5,
"billing_shipping_id": 1,
"payment_method_id": 2,
"delivery_id": 2,
"txnid": "",
"order_no": "0822-1582695084-0006",
"delivery_amount": 0.0,
"discount_amount": 570.0,
"order_total": 2280.0,
"payment_status": "Unpaid",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active",
"mihpayid": "",
"payuMoneyId": "",
"order_detail_data": [{
"order_detail_id": 1,
"order_id": 1,
"user_id": 5,
"product_id": 202,
"product_size_id": 867,
"size_id": 1,
"qty": 1,
"product_price": 2850.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-02-26T11:01:24",
"feedback": "",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active"
}],
},
{
"order_id": 2,
"user_id": 5,
"billing_shipping_id": 1,
"payment_method_id": 2,
"delivery_id": 2,
"txnid": "",
"order_no": "0822-1582695084-0007",
"delivery_amount": 0.0,
"discount_amount": 570.0,
"order_total": 2280.0,
"payment_status": "Unpaid",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active",
"mihpayid": "",
"payuMoneyId": "",
"order_detail_data": [{
"order_detail_id": 2,
"order_id": 2,
"user_id": 5,
"product_id": 202,
"product_size_id": 867,
"size_id": 1,
"qty": 1,
"product_price": 2850.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-02-26T11:01:24",
"feedback": "",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active"
}], },
# and so on...
],
},
],
"order_detail_data": [
{
"order_detail_id": 1,
"order_id": 1,
"user_id": 5,
"product_id": 202,
"product_size_id": 867,
"size_id": 1,
"qty": 1,
"product_price": 2850.0,
"order_item_status": "Placed",
"last_status_datatime": "2020-02-26T11:01:24",
"feedback": "",
"created_datetime": "2020-02-26T11:01:24",
"updated_datetime": "2020-02-26T05:31:24",
"status": "Active"
},
],
},
],
}
def merge_order_data_and_detail(orders, details):
"""Group details by order_id and merge it in orders."""
# create dictionary key:order_id value:[order_detail_data]
dic = {}
for d in details:
if d['order_id'] not in dic:
dic[d['order_id']] = []
dic[d['order_id']].append(d)
# iterate orders and add details
for o in orders:
if o['order_id'] in dic:
o['order_detail_data'] = dic[o['order_id']]
orders = [
{
"order_id": 1,
"user_id": 5
},
{
"order_id": 2,
"user_id": 50
}
]
details = [
{
"order_detail_id": 1,
"order_id": 1,
"user_id": 5,
"product_id": 202
},
{
"order_detail_id": 2,
"order_id": 1,
"user_id": 5,
"product_id": 203
},
{
"order_detail_id": 3,
"order_id": 2,
"user_id": 50,
"product_id": 402
},
{
"order_detail_id": 4,
"order_id": 2,
"user_id": 50,
"product_id": 403
}
]
merge_order_data_and_detail(orders, details)
print(orders)
[{'order_id': 1, 'user_id': 5, 'order_detail_data': [{'order_detail_id': 1, 'order_id': 1, 'user_id': 5, 'product_id': 202}, {'order_detail_id': 2, 'order_id': 1, 'user_id': 5, 'product_id': 203}]}, {'order_id': 2, 'user_id': 50, 'order_detail_data': [{'order_detail_id': 3, 'order_id': 2, 'user_id': 50, 'product_id': 402}, {'order_detail_id': 4, 'order_id':
2, 'user_id': 50, 'product_id': 403}]}]