Django:如何按照order_id获取order_detail_data [英] Django: how to get order_detail_data as per order_id

查看:94
本文介绍了Django:如何按照order_id获取order_detail_data的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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_query)
                order_result = cursor.fetchall()
                order_data = list(order_result)
                # print(order_data)


                cursor.execute(order_detail_query)
                order_detail_result = cursor.fetchall()
                order_detail_data = list(order_detail_result)
                # print(order_detail_data)

            totalData.append({"order_data":order_data, "order_detail_data":order_detail_data})
            return Response({"totalData":totalData,},status=status.HTTP_200_OK)
        else:
            return Response(status=status.HTTP_400_BAD_REQUEST)

输出:

{
    "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这样在order_data中添加order_detail_data:

i want order_detail_data inside order_data as per order_id like this:

{
    "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"
                },
                ],
                },                                                                            
                ],                                                                              
                }

我正在使用原始查询直接从中获取数据 数据库而不是ORM.我想按顺序在order_data中获取order_detail_data order_id.

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.

我正在尝试解决此问题,但没有得到任何可能的答案来解决此问题.如果有人可以帮助我寻找我想要的东西,那就太好了.提前非常感谢您!.

推荐答案

如果使用的是原始查询,则只需要合并数据即可.这样的事情应该起作用,

If you are using raw queries, then you just need to merge the data. Something like this should work,

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}]}]

为了方便测试,我删除了很多订单和明细属性.

I remove a lot of orders and details attributes just to make simple to test.

我没有完整的图片,但是如果您还没有使用Django模型,应该考虑一下.这是一种充分利用框架潜力的方法.

I don't have the whole picture, but should think in using Django models if you are not already using it. It is the way to take advantage of the full potential of the framework.

希望有帮助.

这篇关于Django:如何按照order_id获取order_detail_data的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆