-1

我在 django 中创建了一个 todo 模型,使用一种清除旧 todo 的方法,该方法应该删除超过 24 小时前发布的 todo,我似乎无法在我的 if 条件下比较 datetime 和 timezone 实例

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'
4

1 回答 1

1

datetime从 a中减去 adatetime得到 a timedelta,即两次之间的差。timedelta从 a中减去 adatetime会得到datetime一个新的时间戳,与第一个时间戳相差timedelta.

timezone.now()-todo.pub_date中,您减去两个datetime
timezone.now()-time_limit中,您timedelta从 a 中减去 a datetime

要么想要timezone.now() - todo.pub_date产生 atimedelta并检查它是否timedelta>/<某个特定值(即比较两个timedeltas),要么您想要在过去timezone.now() - time_limit产生 adatetime并检查它是否是>/<你的todo.pub_date datetime.

于 2020-01-15T10:50:35.990 回答