Как я могу сравнить экземпляры часового пояса и даты и времени - PullRequest
0 голосов
/ 15 января 2020

Я создал модель задачи в django с помощью метода очистки старых задач, который должен удалять задачи, которые были опубликованы более 24 часов go. Кажется, я не могу сравнить дату и время с часовым поясом. экземпляры в моем условии if

class Todo(models.Model):
    description = models.CharField(max_length=200)
    Todo_date = models.DateTimeField('Todo Date')
    pub_date = models.DateTimeField('Date Published')

    def __str__(self):
        return self.description

    def create_todo(self, description, Todo_date, pub_date):
        todo = Todo(description=description,
                    Todo_date=Todo_date, pub_date=pub_date)
        todo.save()
        return todo

    def delete_todo(self, description):
        todo = Todo.objects.get(description=description)
        todo.delete()
        return "Todo removed"

    def clear_old_todo(self):
        todos = Todo.objects.all()
        time_limit = datetime.timedelta(hours=24)
        for todo in todos:
            if (timezone.now()-todo.pub_date) > (timezone.now()-time_limit):
                todo.delete()
                return "old todo cleared"
>>> Todo.clear_old_todo("self")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "E:\projects\1stDjangoApp\ToDoList\ToDo\models.py", line 36, in clear_old_todo
    if (timezone.now()-todo.pub_date) > (timezone.now()-time_limit):
TypeError: '>' not supported between instances of 'datetime.timedelta' and 'datetime.datetime'

1 Ответ

1 голос
/ 15 января 2020

Вычитание datetime из datetime дает вам timedelta, разницу между двумя значениями. Вычитая timedelta из datetime, вы получаете datetime, новую метку времени, отличающуюся от первой на величину timedelta.

В timezone.now()-todo.pub_date вы вычитаете два datetime.
В timezone.now()-time_limit вы вычитаете timedelta из datetime.

Вы либо хотите сделать timezone.now() - todo.pub_date, чтобы получить timedelta и проверьте, является ли timedelta > / < некоторым определенным c значением (т. е. сравните два timedelta с), или , которые вы хотите сделать timezone.now() - time_limit, чтобы получить datetime в прошлом и проверьте, является ли это > / < вашим todo.pub_date datetime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...