Django не создает объекты модели после получения данных из внешнего API платежей

Я создал приложение для заказа столов (в основном как сайт электронной коммерции), которое имеет 3 модели:

class Dish(model.Models):
       some other fields()



class Cart(model.Models):
       customer = models.ForeignKey(User) 
       session_key = models.CharField(max_length=40)
       dish = models.ForeignKey(Dish) 
       order = models.ForeignKey(Order) 
       paid = models.CharField(max_length = 3, default = "No")
       some other fields()



class Order(model.Models):
       customer = models.ForeignKey(User) 
       session_key = models.CharField(max_length=40)
       some other fields()

Все товары, которые добавляются в корзину, имеют поле по умолчанию "Нет", которое превращается в "Да" после оплаты. Если пользователь аутентифицирован, он заполняет поле customer для элемента корзины, в противном случае он создает ключ сессии со следующей функцией:

def create_session(request):
        session = request.session
        if not session.session_key:
            session.create()
            
        return session

Для обработки платежа приложение использует Square (аналогично stripe). Следующее представление позаботится об этом:

from square.client import Client

def square_payment(request):
        # this view receives the necessary data such as order total and token via a POST request.
        # I have omitted these details for the simplicity of the example
    if request.method == "POST":

        #create a client object to handle payment through Square
        client = Client(access_token= "some access token",environment= "production")
        body = {}
        body['amount_money']['amount'] = "some amount"
        # execute payment with the amount specified in body 
        result = client.payments.create_payment(body = body)
        
        
        if result.is_success():    
            if request.user.is_authenticated:
                order_object = Order.objects.create(customer = request.user)
                Cart.objects.filter(customer = request.user, paid = "No").update(paid = "Yes")
                
            else:
                session = create_session(request)
                order_object = Order.objects.create(session_key = session.session_key)
                Cart.objects.filter(session_key = session.session_key, paid = "No").update(paid = "Yes")
                
        elif result.is_error():
            return JsonResponse({"Message":"Error"})

Я тестировал все много раз и, казалось, все работало хорошо, пока я не протестировал его в ресторане, и результаты, которые я получил, были весьма неоднозначными. Результаты были следующими:

#1) Все работало как ожидалось, платеж прошел, объект заказа был создан, и все элементы корзины, связанные с этим заказом, были обновлены до paid = "Yes". #2) Платеж прошел, объект заказа был создан, но элементы корзины не были обновлены до "Да". #3) Платеж прошел, но ни объект заказа не был создан, ни элементы корзины не были обновлены до paid = "Yes".

Не совсем уверен, в чем проблема, но буду очень признателен, если кто-нибудь укажет мне правильное направление.

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