Вычитание двух дат в запросе django - PullRequest
0 голосов
/ 07 марта 2011
class Case( models.Model ):
created          = models.DateTimeField()    
modified          = models.DateTimeField()

STATUS = (
    ('Active', 'Active'),
    ('Hold', 'Hold'),
    ('Expired', 'Expired'),
    ('Cancelled', 'Cancelled'),
)
status     = models.CharField(max_length=32, choices=STATUS)

Теперь я хочу извлечь записи, срок действия которых истек менее 2 месяцев назад, просто срок действия более 2 месяцев назад не должен учитываться.

Я прочитал __here subtraction of dates, но в моем случае это не работает.

 expired_cases = Case.objects.filter( status = 'Expired', modified__lt = datetime.now() - timedelta(days=60) ).count()  

этот запрос может работать, но я не хотел жестко кодировать дни в этом.

Пожалуйста помогитеменя в этом вопросе.Спасибо заранее:)

Ответы [ 2 ]

0 голосов
/ 08 марта 2011

Вы можете использовать lib календаря Python, чтобы вернуть список дней. Обратите внимание, что он не обрабатывает високосные годы, поэтому вам нужно реализовать решение для этого.

>>> days = calendar.mdays
[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

Получите таким образом дни текущего месяца, затем вычислите необходимую вам временную дельту. Вам нужно убрать первый элемент из списка, чтобы он работал.

>>> days = days[1:]
>>> month = datetime.date.today().month-1 #-1 due to 0-based indexing in list
>>> delta = days[month-1] + days[month-2]
0 голосов
/ 07 марта 2011

Используйте модуль python-dateutil. Создайте объект Python datetime из измененного времени и вычитания. Это должно работать.

...