2017-01-24 102 views
0

我的自定义方法实际上是一种计算,我试图通过管理器避免排序,如果可能的话只使用order_by。有没有一种方法或一行语法来实现这一点?这里是我的模型:Django通过自定义方法排序

class Bet(models.Model): 


    provider = models.ForeignKey(Provider) 
    member = models.ForeignKey(Member) 
    game = models.ForeignKey(Game) 
    status = models.ForeignKey(Status) 
    bet_id = models.CharField(max_length=200) 
    bet_time = models.DateTimeField() 
    bet_amount = models.FloatField() 
    valid_bet_amount = models.FloatField() 
    settlement_amount = models.FloatField() 

    def get_profit(self): 
     return self.settlement_amount - self.valid_bet_amount 

回答

4

您正在寻找注释

profit = F('settlement_ammount') - F('valid_bet_amount') 
my_query.annotate(profit=profit).order_by('profit') 

Using F() with annotations

+1

好家伙!你很棒!谢谢! –

+0

@DeanChristianArmada - 不用担心,这也可以作为一条线,但我选择将它分离为一个单独的变量,以避免代码示例中的滚动条 – Sayse

+0

是的,我同意你的看法! –