2015-03-19 66 views
-2

我想从我的模型TradeOrder的数据库处理查询:处理Django模型

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) 

当我下views.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" 
+0

你的实际问题是什么? – 2015-03-19 06:59:49

+0

我不知道该怎么做 '[]' 我很确定它的名单,但我不知道如何分解它并使用它 – abyss 2015-03-19 07:04:37

+2

它是'TradeOrder'模型的实例列表,每个数据库行一个。你可以像在Django教程中学到的那样处理它们。 – 2015-03-19 07:07:24

回答

0
now i need to sort the orders for trade rates above/greater than $new_order_price 

你应该细化适当地使用查询集的查询集方法:

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

+0

这个评论是有帮助的,但是我仍然不清楚如何在你的QuerySet之后使用实例。一旦我完成查询和它的排序,我想要做'像market_sell_orders中的每个实例,#填写订单 如果market_sell_orders.instance_trade_amount <= new_order_trade_amount: dosomething = 1' – abyss 2015-03-19 22:18:41

+0

这个答案是最有帮助的,最后我在提供的链接的queryset api中结束了所有事情 – abyss 2015-05-26 17:49:13