我一直在尝试调试为什么我的几个模型中的last_updated字段在例如 for(size_t kk = 0; kk < n; kk += BLOCK)
{
for(size_t jj = 0; jj < n; jj += BLOCK)
{
for(size_t i = 0; i < n; ++i)
{
for(size_t k = kk; k < kk + BLOCK; ++k)
{
int r = a[i][k];
for(size_t j = jj; j < jj + BLOCK; ++j)
{
c[i][j] += r * b[k][j];
}
}
}
}
}
时没有更新,例如:
model.objects.filter(**lookups).update(**defaults)
这里我只是尝试更新单个条目,而不需要将实例加载到内存中。这似乎是一个无法解决的问题,在docshttps://code.djangoproject.com/ticket/15566中解释了'bug'(出于某种原因,我无法在文档中看到它)。
但是,更新单行的最佳方法是什么,包括last_updated字段(无需加载到内存中)?
答案 0 :(得分:5)
它不适用于此问题中发布(声明为无法修复)https://code.djangoproject.com/ticket/22981
.update()只会更新显式传递给它的字段,因此不会更新auto_now = True的datetimefields。
答案 1 :(得分:0)
我知道记录的行为是.update()
将忽略更新auto_now[_add]
字段,这也由Yunti的回答所证实。但是,对于那些希望强制达到预期效果的人-例如,将auto_now
字段作为.update()
调用的一部分进行更新,以下方法似乎有效...
update(field1=val1, field2=val2,..., last_update=datetime.now())
其中last_update
是带有(或不带有)models.DateTime
的{{1}}类型的字段。但是,请注意,如果将auto_now=True
以外的其他值(当前时间戳)传递给此字段,则ORM不会将其更正为当前时间戳(这就是now()
标志语义暗示)。因此,例如,在以下代码段中,auto_now
字段的确会被指定的时间戳覆盖,无论它是过去,现在还是将来...
last_update
因此,如果您希望在调用 update(field1=val1, field2=val2,..., last_update=datetime.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p'))
时强制使用auto_now
的标准语义,请确保正确将当前时间戳作为更新值传递给这些领域。您正在手动执行此操作(由于Django ORM实现中存在缺陷/不足),但是您这样做是正确的。