Понимание выражения 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().

Вернуться на верх