Django: обновлять поле модели каждый раз, когда внешний ключ связан с указанной моделью? - PullRequest
0 голосов
/ 29 мая 2019

Предположим, у нас есть следующие классы:

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 голосов
/ 29 мая 2019

Добро пожаловать в StackOverflow.

Распространенная проблема, с которой люди сталкиваются при создании триггеров, заключается в том, что они забывают (или не знают) импортировать сигналы в свой файл apps.py.Это единственная причина, по которой я могу представить, что ваш сигнал не сработает.

Я думаю, ваш файл apps.py должен выглядеть примерно так (если имя вашего приложения Shop):

from django.apps import AppConfig

class ShopConfig(AppConfig):
    name = 'Shop'

    def ready(self):
        import Shop.signals

Затем вы можете использовать сигнал post_save для CartItem, чтобы получить связанную с ним корзину, сложить итоговое значение и сохранить корзину с новым итогом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...