Понимание выражения F в Django
То, что я сделал, это -
prev_ordr = Order.objects.filter(abc).values("order_sl").first()
if prev_ordr:
new_order_sl = prev_ordr.get("order_sl")
else:
new_order_sl = 100000
ins.order_sl = F("order_sl") + (new_order_sl + 1)
ins.save()
ins.refresh_from_db()
return
Но я не уверен насчет этого, это загрузка предыдущего значения в python, а не прямое управление базой данных (я так думаю), как это должно быть в случае выражения F, и это может привести к сбою в состоянии гонки.
Не могли бы вы подсказать мне правильный способ, я должен увеличить значение на 1 (начиная с последней строки) в новой строке.
Спасибо
Самый простой и надежный подход заключается в использовании последовательности на стороне базы данных (CREATE SEQUENCE от PostgreSQL или пакет django-sequences), чтобы каждая order_sl распределялась атомарно самой базой данных. Если вы не можете добавить последовательность, завершите поиск по максимуму и вставьте в одну транзакцию с помощью select_for_update().