Django Signals для обновления другой модели
Скажем, у меня есть две модели:
class Product(models.Model):
product = model.CharField()
quantity = model.IntegerField()
class sale(models.Model)
product = models.ManyToManyField(Product)
number_sold = model. IntegerField()
Когда будет сделана продажа, я бы хотел, чтобы количество товара обновлялось. Являются ли сигналы лучшим способом для этого?
Я думал о том, чтобы продажа допустила сигнал post_save, когда объект создается или обновляется. В случае обновления мне нужно будет знать старые и новые значения, чтобы корректировать количество. Таблица продукта должна была бы прислушиваться к этому сигналу.
Я также думал о том, чтобы таблица продуктов отправляла пользовательский сигнал после обновления количества. Если количество < 0 товара находится на обратном заказе, иначе "успех".
Я новичок в django и сигналах, но подходит ли это для сигналов или это лучший способ сделать это? Я прочитал документы, посмотрел видео по сигналам и прочитал несколько примеров. Мне еще предстоит увидеть сигналы, используемые таким образом, но я не могу придумать какой-либо другой способ выполнить эту задачу.
Вот как я в итоге достиг своей цели, мне очень интересно узнать, является ли это правильным способом сделать это. Я извиняюсь за модели, не соответствующие приведенному ниже коду, я упростил свои модели, чтобы сделать их проще.
@receiver(pre_save, sender=Customer_Order_Products)
def update_quantity(sender, **kwargs):
obj = kwargs['instance']
updated_product = Inventory.objects.get(title = obj.product_id)
if not obj.id:
updated_product.quantity -= obj.quantity
else:
updated_product.quantity -= (obj.quantity - Customer_Order_Products.objects.get(id = obj.id).quantity)
Inventory.save(updated_product)