Я ищу надежный способ гарантировать, что для данного экземпляра модели django определенное поле записывается только один раз.Убедитесь, что поле модели django написано только один раз? Атоматичность гарантирована без блокировок
Код должен работать как в представлении, так и в задачах с использованием сельдерея или даже rq.
Я имею в виду, используя следующий фрагмент кода:
from django.db import transaction
from django.utils.timezone import now
...
def perform_writeonce(object_pk):
with transaction.atomic():
instance = MyModel.objects.get(pk=object_pk)
if instance.value is None:
instance.value = 'Value written now : {}'.format(now())
instance.save()
Цель состоит в том, что значение должно быть записано только один раз и только если его значение равно None.
Уверены ли вы в этом фрагменте или есть что-то, что я пропустил?
Я использую несколько экземпляров оружия и работников сельдерея с одним сервером базы данных postgresql.
Я стараюсь избегать блокировок любой ценой, поэтому любое решение с помощью шлюзов приложений не является хорошим.
Спасибо за любую помощь.
Я уверен. потому что транзакция зависит от уровня db, а не от прикладного уровня. – itzMEonTV