Django:每当外键与模型关联时,更新模型字段吗?

时间:2019-05-29 14:03:41

标签: python django django-models foreign-keys

假设我们有以下课程:

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

这是我的第一个问题,如果我能更好地解释一下,请告诉我。

1 个答案:

答案 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保存为新的总计。