Увеличение поля даты и времени с помощью queryset.update - PullRequest
1 голос
/ 02 октября 2010

Моя модель выглядит так

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?

1 Ответ

2 голосов
/ 02 октября 2010

Это вполне возможно. Не уверен, что вы ищете кэшированное значение для своего 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)
...