Я создаю простое приложение для интернет-магазина, поэтому, когда вы хотите купить товар, нажатие кнопки приводит вас к списку API зарядки. (напр. пункт 2 будет направлен на / api / обвинение / 2)
urls.py
from django.urls import path
from gallery.views import ClothingView
from gallery.api.views import ListClothes
from gallery.api.views import ChargeView
urlpatterns = [
path('api/<int:num>/', ListClothes.as_view()),
path('api/charge/<int:num>', ChargeView.as_view(), name='charge_api'),
]
views.py
class ChargeView(ListCreateAPIView):
serializer_class = ChargeSerializer
count = 0
def get_queryset(self):
a = ClothingModel.objects.filter(id=self.kwargs['num']).first()
net_price = int(float(a.full_price) * 100)
if float(a.discount) > 0.00:
net_price = int(net_price * (1 - (float(a.discount) / 100)))
self.count += 1
print(self.count)
if self.count == 1:
stripe.api_key = settings.API_KEY
charge_rtn_body = stripe.Charge.create( # Create charge object
amount=net_price,
currency="usd",
source="tok_visa", # obtained with Stripe.js
description= "[Stripe charge] " + a.description.upper()
)
return ClothingModel.objects.filter(id=self.kwargs['num'])
serializers.py
class ChargeSerializer(serializers.ModelSerializer):
class Meta:
model = ClothingModel
fields = ('full_price', 'discount', 'description')
Я создаю объект начисления для Stripe (метод оплаты) каждый раз, когда вызывается API, но зависит от идентификатора предмета одежды. Поэтому, чтобы справиться с этим, я использую self.kwargs в get_queryset () для ссылки на элемент одежды. Когда я просматриваю платежи на панели инструментов Stripe после одного щелчка, происходит сразу несколько платежей (по 4 за раз). Я жестко закодировал if self.count == 1:
как обходной путь, но знаю, что это не очень хорошая практика. Есть ли причина для этих многочисленных вызовов в get_queryset () для одного запроса и как я могу их реализовать чисто? Спасибо.