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".
Не совсем уверен, в чем проблема, но буду очень признателен, если кто-нибудь укажет мне правильное направление.