Я работаю на веб-сайте ECommerce, использую сигналы для обновления общей стоимости в «Заказе».-> post_save_cart_total () - вызывается при создании новой корзины -> post_save_order () - вызывается при создании или изменении заказа в корзине -> Значения корзины обновляются с помощью update_total (), которая вызывается вpost_save_order (), в операторе if (который проверяет, создан ли заказ) -> post_save_order () вызывается после завершения post_save_cart_total () {этот вызов вызывается только один раз / каждый раз, когда создается новая корзина} -> post_save_order () вызывается дважды после создания корзины (post_save_cart_total ()) - 1-й раз для заполнения значений заказа - 2-й раз в качестве обновления и вызывается каждый раз при изменении заказа Issue -> TheПроблема, с которой я сталкиваюсь, заключается в следующем: - Когда post_save_order () вызывается в первый раз, значение create = True , управление переходит в оператор if и update total вызывается для обновления значений в порядке. - 2-й раз, когда вызывается post_save_order () , значение cReated изменяется создал = False и значения не обновляются в порядке - поэтому, когда я изменяю элементы (добавление / удаление) в порядке, значения корзины не изменяются, (т.е.) элемент управленияне выполняет код под оператором if , так как создал = False
`
def pre_save_create_order_id(sender, instance, *args, **kwargs):
if not instance.order_id:
instance.order_id = unique_order_id_generator(instance)
#instance.save() #--> Since pre_save signal is used here, this is not required
pre_save.connect(pre_save_create_order_id, sender=Order)
def post_save_order(sender, instance, created, *args, **kwargs):
print('post_save_order')
print('Before if, created = %s' %created)
print('Running')
#instance.update_total()
if created:
print('if stmnt, created = %s' %created)
print('Updating - - - > First')
instance.update_total()
else:
print('else stmnt, created = %s' %created)
print('2nd entry')
#instance.update_total()
post_save.connect(post_save_order, sender=Order)
---------> все сигнальные функции {post_save_cart_total (), post_save_order ()} определены вне класса Order, update_total определен внутри класса Order <------------- </p>
def update_total(self): #This method is called when a cart changes he order size or when an order is created
cart_total = self.cart.total
print(cart_total)
shipping_total = self.shipping_total
new_total = cart_total + shipping_total
print(new_total)
self.total = new_total
self.save()
return new_total
`
Windows cmd Журнал:
[27/Sep/2018 14:16:22] "GET /admin/jsi18n/ HTTP/1.1" 200 3189
post_save_order
Before if, created = True
Running
if stmnt, created = True
Updating - - - > First
30.00
33.99
post_save_order
Before if, created = False
Running
else stmnt, created = False
2nd entry