Умножение разницы между сегодняшним днем и полем DateField на число с помощью Django Models

Я пытаюсь получить разницу в днях между

  1. дата каждой строки моей таблицы
  2. текущая дата Таким образом, я могу умножить ее на число. Однако я продолжаю получать ошибки и исключения. Я искал в Google, в документации Django, но так и не смог найти, как это сделать. Я даже спрашивал у ChatGPT и Codeium, но они продолжают давать совершенно неправильные советы и указания.

Если я слишком упрощаю свою модель и запрос, то есть таблица History со всеми строками, содержащими символы, их тип и ранг на определенную дату.

class History(models.Model):
    date = models.DateField()
    type = models.CharField(max_length=255, choices=["type1", "type2", "type3"])
    symbol = models.CharField(max_length=10)
    rank = models.PositiveSmallIntegerField()
    rating = models.DecimalField(max_digits=3, decimal_places=2)

Затем с помощью этого запроса я пытаюсь получить все строки "type1", затем получить разницу в днях между сегодняшним днем и их date, чтобы умножить эту сумму на их ранг:

compiled_type = (
    History.objects
    .values("symbol", "type")
    .filter(type="type1")
    .annotate(days_difference_delta=datetime.now().date() - F('date')) # This works and returns a TimeDelta
    .annotate(score=ExpressionWrapper((datetime.now().date() - F('date')) * F('rank')), output_field=IntegerField) # Getting a ton of errors and exceptions whatever I put on this line
    .order_by("-score").all()
)

Опять же, это чрезмерное упрощение, так как это только первый шаг более сложного вычисления, где я буду группировать все строки по их symbol и Sum()all the scores, but I'm trying to make this simple query work first. I tried without theExpressionWrapper, I tried setting the output_fieldtoDecimalField, DateField, DurationField`, и так далее и тому подобное. Но я понятия не имею, что я делаю, и кажется, что документация Django не очень хорошо объясняет, как это работает.

Как умножить TimeDelta на число? Или как умножить число на количество дней между двумя датами?

Вернуться на верх