2012-05-24 3 views
0

У меня есть класс модели, который представляет ставку пользователя. Я хотел бы рассчитать ежедневные выигрыши для всей базы данных (не одного пользователя). Выигрыши для каждой ставки пользователя рассчитываются по формуле odds * coins (когда результат = 1).расчет ежедневных выигрышей с django

class UserBet(models.Model): 
    user = models.ForeignKey(User) 
    bet = models.ForeignKey(Bet) 
    coins = models.FloatField(default=0.0) 
    placed = models.DateTimeField(editable=False) #when user places the bet 
    result = models.SmallIntegerField(default=0) # 1: win, 0: no result yet, -1: lose 
    odds = models.FloatField(default=0.0) 
    week_number = models.SmallIntegerField(default=0) 
    year = models.SmallIntegerField(default=0) 
    modified = models.DateTimeField() #when result is updated 

Я получаю ежедневные монеты помещены для успешных результатов, как это (MySql):

UserBet.objects.filter(result=1).extra({'date_modified':"date(modified)"}).values('date_modified').annotate(coins_sum=Sum('coins'))

однако это не то, что я хочу. Монеты, размещаемые каждым пользователем, должны умножаться на каждый коэффициент ставки пользователя, чтобы получить ежедневный выигрыш.

Возможно ли это вообще?

ответ

1

Вы можете использовать QuerySet.extra метод:

UserBet.objects.filter(result = 1).extra({'winnings':'odds * coins'})... 
+0

Спасибо, я попробовал, и я не получаю ежедневно агрегированные результаты, больше. Это не большая проблема. Я могу сделать некоторую пост-обработку и достичь результата, который я хочу. Я вставляю часть того, что у меня есть: '[{'winnings': 62.5, 'coins_sum': 25.0, 'date_modified': datetime.date (2012, 4, 27)}, {'winnings': 162.0, 'coins_sum ': 54.0,' date_modified ': datetime.date (2012, 4, 28)}, {' winnings ': 25.5,' coins_sum ': 15.0,' date_modified ': datetime.date (2012, 4, 27)} ,. ..' – xpanta

Смежные вопросы