Задача: Запрос модели в Django ORM, чтобы я мог вычислять поля на основе дат.В частности, извлеките месяцы из поля model.date и вычислите значения на основе этих месяцев.
Пример модели:
class PersonProjectHours(models.Model):
project = models.ForeignKey('projects.Project')
person = models.ForeignKey('projects.Person')
rate = models.ForeignKey('PersonIncome')
work_date = models.DateField(help_text=_('Enter date'))
hours = models.IntegerField(help_text=_('Enter hours worked on this day.'))
class PersonIncome(models.Model):
person = models.ForeignKey('projects.Person')
income = models.DecimalField(help_text=_('Enter new income'), max_digits=10, decimal_places=2)
validdate = models.DateField(help_text=_('Enter date from which new income is valid.'))
В моем файле views.py я могу извлечь месяцы и отработанные часы замесяц, как это (я использую диапазон, потому что я не мог понять, как запросить месяц в месяцах в ORM).И я могу рассчитать стоимость часов, отработанных разными людьми, которые работали над проектом, просматривая записи в каждом месяце (просто не работает сейчас, потому что entry.rate - это юникод, и я почему-то не могу его скрытьв целое число ...):
for month in range(1, 13):
entries_per_month = PersonProjectHours.objects.filter(work_date__month=month)
hours = entries_per_month.aggregate(value=Sum('hours'))
cost = 0
for entry in entries_per_month:
cost = cost + (entry.hours * entry.rate)
work_per_year.append([month,hours,cost])
Чтобы завершить этот пример, я перебираю записи в моих шаблонах следующим образом:
{% for month, hours, cost in work_per_year %}
<tr>
<td>{{ month }}</td>
<td>{{ hours.value }}</td>
<td>{{ cost }}</td>
</tr>
{% endfor %}
Что я сделал в представлениях.py не выглядит очень элегантно, есть ли лучший способ вытащить диапазоны дат, как годы, месяцы или дни из полей даты?И в стороне, как мне получить entry.rate целым числом, которое я могу вычислить?
Спасибо за ваш вклад!(да, я очень новичок в программировании, Python и Django ... мне потребовалась неделя, чтобы написать это): -)