【问题标题】:Increasing a datetime field with queryset.update使用 queryset.update 增加日期时间字段
【发布时间】:2011-04-20 02:03:03
【问题描述】:

我的模型是这样的

class MyModel(models.Model):
    end_time = DateTimeField()

这就是我想要实现的目标:

m=MyModel.objects.get(pk=1)
m.end_time += timedelta(seconds=34)
m.save()

但我想用 update() 来避免竞争条件:

MyModel.objects.filter(pk=1).update(end_time=F('end_time')+timedelta(seconds=34))

但它不起作用。这可以通过 django ORM 实现还是原始 SQL 是唯一的选择?

【问题讨论】:

  • 不管怎样,我能够在我的机器上重现这个错误。我正在使用 Django 1.2.3、Python 2.6.2 和 MySQL 5.0.75-0ubuntu10.5 (Ubuntu)。

标签: python django datetime django-orm


【解决方案1】:

这是完全可能的。不确定您是否正在查看 end_time 的缓存值,但这是我刚刚运行的测试:

>>> e = Estimate.objects.get(pk=17)
>>> e.departure_date
datetime.datetime(2010, 8, 12, 0, 1, 8)
>>> Estimate.objects.filter(pk=17).update(departure_date=F('departure_date')+timedelta(seconds=34))
1
>>> e.departure_date
datetime.datetime(2010, 8, 12, 0, 1, 8)
>>> e = Estimate.objects.get(pk=17)
>>> e.departure_date
datetime.datetime(2010, 8, 12, 0, 1, 42)

【讨论】:

  • 当我这样做时,我得到一个错误:Warning: Truncated incorrect DOUBLE value: '0 0:0:34' full tr​​aceback here:pastebin.com/n67WkwWK
猜你喜欢
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 2011-05-04
  • 2016-09-30
相关资源
最近更新 更多