Select_for_update не работает, даже если он находится внутри транзакции
Я пытаюсь получить объект клиента из базы данных. Для этого я написал отдельный сервис. Но моя проблема в том, что select_for_update не работает, когда я пытаюсь получить клиента через него, но raw orm query работает.
Ошибка, которую я получаю
django.db.transaction.TransactionManagementError: select_for_update cannot be used outside of a transaction.
Обслуживание клиентов
class CustomerService:
@staticmethod
def get_customer(select_for_update=False, **params_dict) -> Customer:
"""
param: customer mobile number
return: Customer object
raises exception INVALID_CUSTOMER if customer does not exist
"""
try:
customer = Customer.objects
if select_for_update:
customer = customer.select_for_update()
customer = customer.get(**params_dict)
return customer
except Customer.DoesNotExist:
raise ParseException(INVALID_CUSTOMER, errors='INVALID_CUSTOMER')
Это не работает-
@transaction.atomic
def create(self, request, *args, **kwargs):
customer = CustomerService.get_customer({"id": customer_id}, select_for_update=True)
но это делает
@transaction.atomic
def create(self, request, *args, **kwargs):
try:
customer = Customer.objects.select_for_update().get(id=customer_id)
except Customer.DoesNotExist:
raise ParseException(INVALID_CUSTOMER, errors='INVALID_CUSTOMER')