Сигналы Django - "Созданный" аргумент становится ложным

Я работаю на веб-сайте ECommerce, использую сигналы для обновления общей стоимости в "Заказе". -> post_save_cart_total() - вызывается при создании новой корзины -> post_save_order() - вызывается при создании или изменении заказа в корзине -> Значения корзины обновляются с помощью update_total(), которая вызывается в post_save_order(), в операторе if (который проверяет, создан ли заказ) -> post_save_order () вызывается после завершения post_save_cart_total () {этот fn вызывается только один раз / каждый раз, когда создается новая корзина} -> post_save_order () вызывается дважды после создания корзины (post_save_cart_total ()) - 1-й раз для заполнения значений заказа - 2-й раз как обновление и вызывается каждый раз при изменении заказа Проблема -> Проблема, с которой я здесь сталкиваюсь,, - Когда post_save_order () вызывается в 1-й раз, значение create = True, управление переходит в оператор if и вызывается обновление итогов для обновления значений в порядке - 2-й раз, когда post_save_order () вызвано, значение созданного изменено созданный =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 <------------ -

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 

0 ответов

Другие вопросы по тегам