【发布时间】:2013-08-27 14:15:34
【问题描述】:
我有一个问题...
message_batch = Message.objects.all()[500]
我不想再次调用数据库来检索对象,而且我已经将它们放在内存中,所以重点是什么。
所以我尝试这样更新:
message_batch.update(send_date=datetime.datetime.now(), status="Sent")
但我收到以下错误消息:
获取切片后无法更新查询。
为什么?周围有这个吗?我想更新内存中已有的对象,而不是再次调用来检索它们。
这是我的完整代码,必须绕过这个......
total = Message.objects.filter(status="Unsent", sender=user, batch=batch).exclude(recipient_number__exact='').count()
for i in xrange(0,total,500):
message_batch = Message.objects.filter(status="Unsent").exclude(recipient_number__exact='')[i:i+500]
# do some stuff here
# once all done update the objects
message_batch.update(send_date=datetime.datetime.now(), billed=True)
【问题讨论】:
-
使用 django-memcached 来做。它可能会有所帮助
-
解决方法是让 django evaluate 切片之前的查询集。像
message_batch = Message.objects.all()然后count = len(message_batch)然后message_batch = message_batch[:500].update(...)