【问题标题】:Processing django models处理 django 模型
【发布时间】:2015-05-22 05:23:31
【问题描述】:

我正在尝试处理来自我的模型 TradeOrder 数据库的查询:

class TradeOrder(models.Model):
    #denoted in 2 three letter tickers with underscore such as anc_btc
    pair = models.CharField(max_length=50)
    #buy_order or sell_order
    order_type = models.CharField(max_length=50)
    #number e.g. .3455 or .190  
    trade_rate = models.PositiveIntegerField()
    trade_amount = models.PositiveIntegerField()
    #name of the account
    trade_order_account = models.CharField(max_length=50)

    def __str__(self):
        return '%s %s %s %s %s'  % (self.pair, self.order_type, self.trade_rate, self.trade_amount, self.trade_order_account)

当我在 view.py 下为我的应用执行时

buyorders=TradeOrder.objects.filter(pair="anc_btc", order_type="buy_order")

我得到一个如下所示的列表:

[<TradeOrder: anc_btc buy_order 7987 7897 a>, <TradeOrder: anc_btc buy_order 7897 789 a>, <TradeOrder: anc_btc buy_order 7897 789 a>]

所以想要处理和细化该数据,首先将每个项目与新订单进行比较

类似:

            if new_order_type=="buy_order":
                #crosscheck against sell orders
                market_sell_orders = TradeOrder.objects.filter(pair="anc_btc", order_type="sell_order", trade_order_account=price)
                #now i need to sort the orders for trade rates above/greater than $new_order_price
                #how do i do this?

我现在知道这可以通过添加 .order_by('trade_order_price') 来完成 到查询结束

                if potential_sell_orders is not None:
                #trade
                    do=1
                else: 
                    #no sell orders to fill, submit to order book
                    try:
                        tradeordersubmit=TradeOrder(pair=order_pair, order_type=order_type, trade_rate=price, trade_amount=quantity, trade_order_account=request.user.username) 
                        tradeordersubmit.save()
                        order_error=0
                    except:
                        order_error="1"

【问题讨论】:

  • 你的实际问题是什么?
  • 我不知道如何处理 [&lt;TradeOrder: anc_btc buy_order 7987 7897 a&gt;, &lt;TradeOrder: anc_btc buy_order 7897 789 a&gt;, &lt;TradeOrder: anc_btc buy_order 7897 789 a&gt;] 我很确定它是一个列表,但我不知道如何分解它并使用它
  • 这是TradeOrder 模型的实例列表,每个数据库行一个。你可以像在 Django 教程中学到的那样处理它们。
  • @KlausD。当我查看手册 @docs.djangoproject.com/en/1.7/ref/models/instances 时,我真的只看到了基本的 CRUD 数据库相关功能,我仍然不清楚如何使用这些实例。有没有具体的教程可以指点我?

标签: python django django-models


【解决方案1】:
now i need to sort the orders for trade rates above/greater than $new_order_price

您应该使用 QuerySet 方法适当地优化您的 QuerySet:

 market_sell_orders = TradeOrder.objects.filter(pair="anc_btc", order_type="sell_order", trade_order_account=price, trade_rate__gt=<trade_rate>).order_by('-trade_rate')

您可以找到QuerySet here的教程

【讨论】:

  • 这条评论很有帮助,但我仍然不清楚如何在 QuerySet 之后使用实例。一旦我完成了查询和它的存储,我想做类似for each instance in market_sell_orders, #fill orders if market_sell_orders.instance_trade_amount&lt;=new_order_trade_amount: dosomething=1
  • 这个答案最终是最有帮助的,我在提供的链接中的查询集 api 中结束了所有事情
猜你喜欢
  • 1970-01-01
  • 2020-11-26
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
相关资源
最近更新 更多