Разобраться с timedelta () и datetime.now - PullRequest
0 голосов
/ 02 июня 2018

Я хотел бы установить timedelta для модели данных

class ActivateCode(models.Model):
    """ """
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    code = models.CharField(max_length=100)
    date_expired = models.DateTimeField(default=datetime.now + timedelta(days=1))

Кажется, это неправильное решение, потому что datetime.now не вызывается, но вызывается timedetla(days=1).

Как бороться с такой проблемой?

1 Ответ

0 голосов
/ 02 июня 2018

Вкратце: мы можем создать функцию для вычисления следующего дня.

Мы не можем добавить функцию с объектом timedelta(..), поскольку ни у функции нет __add__ method, ни у объекта timedelta нет метода __radd__ для добавления функций и timedelta s вместе, поэтому Python / Django не может создать новую функцию с этим синтаксисом.

Однако мы можем решить этопроблема с созданием функции, которая вычисляет время по умолчанию:

<b>def tomorrow():
    return datetime.now() + timedelta(days=1)</b>

class ActivateCode(models.Model):
    """ """
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    code = models.CharField(max_length=100)
    date_expired = models.DateTimeField(default=<b>tomorrow</b>)

Мы здесь не вызываем функцию, которую мы установили как default=..., мы только передаем ссылку на наш tomorrowфункция, такая, что если Django создаст новый объект, он вызовет функцию tomorrow(..) и, таким образом, рассчитает точно на следующий день.

...