Idealnie powinieneś mieć stock pole w Twoim Product model, aby zachować liczbę dostępnych ilości dla tego produktu.
Kiedy ktoś złoży zamówienie, oddzielne order instancję należy utworzyć z ilością ilości Prodduct określony. Zapasy należy zmniejszyć dopiero po otrzymaniu wywołania zwrotnego dla tego order lub otrzymany webhook potwierdzający płatność.
Nie uniemożliwiłoby to innym klientom składania zamówień na ten sam produkt, dopóki produkt nie zostanie faktycznie sprzedany.
Innym podejściem może być zmniejszenie zapasów, gdy klient przejdzie na stronę zwrotną i uwolnienie zapasów, jeśli płatność nie zostanie otrzymana w określonym czasie. Wymagane byłoby do tego zadanie w tle.
Uwaga: użyj F obiekt z django.models jednocześnie zmniejszając zapas w celu zmniejszenia zapasów z wartości DB, a nie atrybutu instancji.