python - 尝试在 django 中删除所有超过 7 天的对象,但我不断收到 TypeError: unorderable types: DeferredAttribute() < datetime.datetime()
问题描述
我正在尝试创建一个网页,显示从声波传感器上传到 MySQL 服务器的状态。
我尝试了许多不同的选择安排,但似乎都没有奏效。
当我创建我的第一个 Django 项目时,我按照教程和他们的示例进行操作,选择过去一天创建的对象似乎很有效。
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
在我的项目中,我只是将天数更改为 7,然后将 >= 更改为 <。然后我开始收到“TypeError:不可排序的类型:DeferredAttribute() < datetime.datetime()”。
我的模型.py:
from django.db import models
import datetime
from django.utils import timezone
class garage_door(models.Model):
date = models.DateTimeField(auto_now_add=True)
state = models.CharField(max_length=6)
def __str__(self):
return str(self.date)[:19]
def select_old(self):
return self.date < timezone.now() - datetime.timedelta(days=7)
我的views.py我在哪里调用这个函数:
from django.shortcuts import render
from django.http import HttpResponse
from dash.models import garage_door
def dashboard(request):
garage_door.select_old(garage_door).delete()
return HttpResponese("Temp Response")
我希望程序(如上所述)删除所有超过 7 天的对象,但由于某种原因,我收到此错误。我从中得到的是我正在比较两个无法比较的变量,但我不知道如何解决这个问题,我什至不知道我对此的猜测是否正确。
它是否与从不同的覆盆子添加到表中的日期有关,如下所示:
sql = "INSERT INTO dash_garage_door(date, state) VALUES(%s, %s)"
now = datetime.datetime.now()
val = (now, g_state)
mycursor.execute(sql, val)
mydb.commit()
(状态为“开放”或“关闭”)
我将非常感谢任何帮助!如果有需要解决这个问题的东西我没有提供,我很乐意提供。
解决方案
不,它与数据的插入方式无关。那是您没有进行查询。
您的方法需要在garage_door 的实例上调用,并且将返回该特定实例是否超过7 天。但是您在class上调用它,显然期望它会在数据库中查询所有匹配项。但这根本不是 Django 的工作方式。
您需要在过滤器表达式中执行此操作:
seven_days_ago = timezone.now() - datetime.timedelta(days=7)
garage_door.objects.filter(date__lt=seven_days_ago)
您可以将其包装到自定义管理器中:
class GarageManager(models.Manager):
def select_old(self):
seven_days_ago = timezone.now() - datetime.timedelta(days=7)
return self.filter(date__lt=seven_days_ago)
class garage_door(models.Model):
...
objects = GarageManager()
现在你可以这样做:
garage_door.objects.select_old().delete()
请注意,根据 Python 风格,您的模型应该被称为GarageDoor
,而不是garage_door
.
推荐阅读
- r - 在 Amazon AWS Ec2 上运行 RStudio
- jquery - 当没有帖子时,为什么计数器在第 1 篇帖子中增加 n 次
- database-design - 桌面应用程序之间的数据共享和通信
- elasticsearch - 如何配置elasticsearch集群数据节点
- html - 为什么我的浏览器不能将 px 字体文本大小设置为我在 CSS 中设置的大小
- python - 输入的不等式检查无法正常工作
- reactjs - 如何在通过 Props 传递的函数中传递多个参数
- java - 跨集群同步文件处理
- python - 多个输入,如何计算 pewma 作为输出?
- oracle - 编写查询以查找在软件工程中得分最高的学生的姓名。根据名称对结果进行排序