我有两个问题:
这是我的代码,但没有成功:
Reporter.objects.delete()
Run Code Online (Sandbox Code Playgroud) 我这里有一个超级简单的django模型:
class Notification(models.Model):
message = models.TextField()
user = models.ForeignKey(User)
timestamp = models.DateTimeField(default=datetime.datetime.now)
Run Code Online (Sandbox Code Playgroud)
使用ajax,我每分钟检查一下新消息.我只会随时向用户显示最近的五个通知.我想避免的是以下场景.
用户登录并且没有通知.当用户的窗口启动时,他会收到10条新消息.因为我只向他展示五个,没什么大不了的.当用户开始删除他的通知时会发生此问题.如果他删除了显示的五个,那么五个旧的将在下一个ajax调用或刷新时显示.
我希望我的模型的save方法除了保存新的对象外,还会删除5个最新的对象.不幸的是,你不能用[5:]来做这件事.救命?
编辑
我试过这个没有按预期工作(在模型的保存方法中):
notes = Notification.objects.filter(user=self.user)[:4]
Notification.objects.exclude(pk__in=notes).delete()
Run Code Online (Sandbox Code Playgroud)
我找不到奇怪行为的模式,但经过一段时间的测试后,它只会在创建新模式时删除最新的模式.我不知道为什么会这样.在模型的Meta类中处理排序(按时间戳降序).感谢您的帮助,但我的方式似乎是唯一一致的.
想象一下 2 行:
Model.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)
和
Model.objects.delete()
Run Code Online (Sandbox Code Playgroud)
执行流程有什么区别吗?数据库服务器是Mysql(Amazon RDBMS)。
第一行是不是先加载所有的对象,然后一个一个的删除呢?或者将执行“截断”命令?
而且,最重要的是- 如果第一行在执行过程中由于某些原因被中断怎么办?例如,我们有一个包含很多记录的大表。如果我们执行第一行并且脚本将被终止 - 这是否意味着某些记录将被删除,而某些记录将被删除?
谢谢你!