假设我们有以下课程:
class Cart(models.Model):
total = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
和
class CartItem(models.Model):
cart = models.ForeignKey(Cart, related_name='items', on_delete=models.CASCADE)
我想每次将购物车商品添加到购物车时更新总数。何时/如何在这里调用我的 addItUp()方法?
考虑使用这样的信号,但这不会触发:
@receiver(post_save, sender=CartItem, weak=False)
def post_save_cartItem_receiver(sender, instance, *args, **kwargs):
print("inside signal")
这是我非常简化的 addToCart()方法:
def add(self, request, product_id, cart_obj):
product = get_object_or_404(Product, id=product_id)
CartItem.objects.create(cart=cart_obj, ...)
cart_obj.save()
return True
这是我的第一个问题,如果我能更好地解释一下,请告诉我。
答案 0 :(得分:0)
欢迎使用StackOverflow。
人们在创建触发器时遇到的一个常见问题是,他们忘记(或不知道)将信号导入其apps.py
文件中。这是我可以想象到您的信号不会触发的唯一原因。
我想您的apps.py
文件应该看起来像(如果您的应用程序名称为Shop
):
from django.apps import AppConfig
class ShopConfig(AppConfig):
name = 'Shop'
def ready(self):
import Shop.signals
然后,您可以对CartItem使用post_save
信号来获取其相关的Cart,将总值相加,然后将Cart保存为新的总计。