Как получить данные за последние шесть месяцев из поля даты - django
У меня есть модель, как указано ниже
class employee(models.Model):
employee_name = models.CharField(max_length=100)
joining_Date = models.DateField(blank=False, null=False)
Я хочу получить данные за последние шесть месяцев (включая текущий месяц), объединенные с подсчетом сотрудников по месяцам.
Пример: Июль : 12, Июнь : 10, май : 8, апрель : 16, март : 13, Февраль : 10,
joining_Date хранится как "2022-07-22".Как это сделать, имея поле даты.
Заранее спасибо.
Вы можете попробовать найти максимально подходящую дату и отфильтровать по ней
from datetime import date
from dateutil.relativedelta import relativedelta
def find_employee(request):
today = date.today()
six_months = today - relativedelta(months=6)
emloyed_for_six_month = Employee.objects.filter(joining_Date__gte = six_months)
Ваша модель
employee
должна быть названа с большой буквы. Это обычное https://stackoverflow.com/a/386054/14632651
Чтобы получить количество новых сотрудников за месяц, необходимо сделать аннотацию и использовать Trunc
для получения только месяца, см. ниже:
from datetime import date
from dateutil.relativedelta import relativedelta
from django.db.models.functions import Trunc
six_months_ago = date.today() + relativedelta(months=-6)
employees_per_month = Employee.objects.filter(join_date__gte=six_months_ago)\
.annotate(
joining_month=Trunc('joining_date', 'month', output_field=DateField())
) \
.order_by('joining_month') \
.values('joining_month') \
.annotate(employees=Count('joining_month'))
Это даст вам набор запросов со следующей структурой:
<QuerySet [{'joining_month': datetime.date(2022, 6, 1), 'employees': 2},
{'joining_month': datetime.date(2022, 7, 1), 'employees': 1}, ...
Редактировать. Чтобы преобразовать QS в плоский дикт:
employee_count_dict = {}
for employee_count in employees_per_month:
employee_count_dict[val['joining_month']] = val['employees']