Я столкнулся с проблемой того, что Django изначально не поддерживает Datediff
(и другие эквиваленты базы данных), и мне нужно было многократно использовать такую функцию для конкретного проекта.
При дальнейшем чтении стало ясно, что реализация вычисления интервала из двух дат сильно отличается в зависимости от основных разновидностей базы данных.Вероятно, поэтому в Django еще нет встроенной функции абстракции.Поэтому я написал свою собственную функцию Django ORM для datediff
:
См .: mike-db-tools Репозиторий Github
Вы увидите различный синтаксис между базами данныхбэкэнды, написанные в строках документации для соответствующих баз данных.Datediff поддерживает sqlite, MySQL / MariaDB, PostgreSQL и Oracle.
Использование (Django 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)
Я действительно очень нервничаю, когда дело касается моего кода, поэтому я призываювам раскошелиться и улучшить.