Умножение разницы между сегодняшним днем и полем DateField на число с помощью Django Models
Я пытаюсь получить разницу в днях между
- дата каждой строки моей таблицы
- текущая дата Таким образом, я могу умножить ее на число. Однако я продолжаю получать ошибки и исключения. Я искал в 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 the
ExpressionWrapper, I tried setting the
output_fieldto
DecimalField,
DateField,
DurationField`, и так далее и тому подобное. Но я понятия не имею, что я делаю, и кажется, что документация Django не очень хорошо объясняет, как это работает.
Как умножить TimeDelta
на число? Или как умножить число на количество дней между двумя датами?