Я столкнулся с проблемой Django, не поддерживающей Datediff
(и другими эквивалентами баз данных), и ему нужно было использовать такую функцию много раз для конкретного проекта.
При дальнейшем чтении стало ясно, что реализация вычисления интервала из двух дат сильно отличается между основными вариантами базы данных. Вероятно, поэтому в Django еще нет встроенной функции абстракции. Так что я написал свою собственную функцию Django ORM для datediff
:
См: mike-db-tools Github repository
Вы увидите изменяющийся синтаксис между базами данных движками написанных в строках документации для соответствующих баз данных. Datediff поддерживает sqlite, MySQL/MariaDB, PostgreSQL и Oracle.
Использование (Джанго 1.8+):
from db_tools import Datediff
# Define a new dynamic fields to contain the calculated date difference
applicants = Applicant.objects.annotate(
days_range=Datediff('date_out','date_in', interval='days'),
)
# Now you can use this dynamic field in your standard filter query
applicants = applicants.filter(days_range__gte=1, days_range__lte=6)
Я действительно очень Дерпите, когда дело доходит до моего кода, поэтому я призываю вас раскошелиться и улучшить.
Отлично, спасибо! – tufelkinder