kentuck1213
@kentuck1213

Как к текущей дате прибавить строковую дату?

from django.utils.timezone import now

print(now(), obj.freeze_time, sep="|||")
# вывод: 2017-09-27 15:26:40.445545+00:00|||1:58:29

пробую их сложить:
now() + obj.freeze_time
получаю ошибку:
unsupported operand type(s) for +: 'datetime.datetime' and 'str'

Разные способы перепробовал. Возможно не правильно подошел к решению задачи.

Есть модель (Реклама):
class General(models.Model):
    ...
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()

    freeze = models.BooleanField(default=False)
    freeze_time = models.CharField(max_length=200, null=True, blank=True)

Пользователь в админ панели будет указывать дату начало рекламы (start_date), и конечную дату рекламы (end_date). Так же он может заморозить рекламу.

Алгоритм :
В поле freeze_time будет храниться оставшееся время рекламы.

Если пользователь замораживает рекламу то мы берем end_date и отнимаем от нее текущую дату now() и суем это значение в поле freeze_time.

Если пользователь размораживает рекламу мы берем в поле текущую дату now() и прибавляем к ней freeze_time и суем это значение в поле end_date
  • Вопрос задан
  • 550 просмотров
Решения вопроса 1
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Используйте для хранения freeze_time число секунд, так будет удобнее хранить в БД и оно удобно конвертируется в/из timedelta, который уже можно прибавлять к datetime.
Пример:
>>> from datetime import datetime, timedelta, now
>>> begin_date = datetime(2017, 9, 1, 0, 0, 0)
>>> end_date = datetime(2017, 9, 30, 0, 0, 0)
>>> freeze_time = end_date - now()
>>> freeze_time
datetime.timedelta(2, 17264, 411894)
>>> freeze_time.total_seconds()
190064.411894
>>> freeze_time = int(freeze_time.total_seconds())
>>> freeze_time
190064
>>> now() + timedelta(seconds=freeze_time)
datetime.datetime(2017, 9, 30, 0, 1, 1, 371159)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы