我这里有一个超级简单的Django 模型:
class Notification(models.Model):
message = models.TextField()
user = models.ForeignKey(User)
timestamp = models.DateTimeField(default=datetime.datetime.now)
使用Ajax,我每分钟都会判断新消息.我在任何时候都只向用户显示最近的五个通知.我想要避免的是下面的场景.
用户登录后没有任何通知.当用户的窗口打开时,他会收到10条新消息.因为我只给他看了5个,没什么大不了的.当用户开始删除他的通知时,问题就会发生.如果他删除了显示的五个,则较早的五个将在下一次Ajax调用或刷新时显示.
每当保存新的对象时,我希望让模型的save方法删除除5个最近对象之外的所有对象.不幸的是,您不能使用[5:]来执行此操作.帮助?
EDIT
我try 了这个方法,但没有按预期效果(在模型的保存方法中):
notes = Notification.objects.filter(user=self.user)[:4]
Notification.objects.exclude(pk__in=notes).delete()
我在奇怪的行为中找不到模式,但经过一段时间的测试,它只会在创建新模式时删除最近的模式.我不知道为什么会这样.排序在模型的元类中进行(通过时间戳降序).谢谢你的帮助,但我的方式似乎是唯一一种始终如一的方式.