Sinais do Django para atualizar um modelo diferente
Digamos que eu tenha dois modelos:
class Product(models.Model):
product = model.CharField()
quantity = model.IntegerField()
class sale(models.Model)
product = models.ManyToManyField(Product)
number_sold = model. IntegerField()
Quando uma venda é feita, eu gostaria que a quantidade do produto fosse atualizada. São sinais a melhor maneira de fazer isso?
Eu estava pensando em ter a venda admitir um sinal post_save quando um objeto é criado ou atualizado. Se atualizado, eu teria que saber os valores antigos e novos para ajustar a quantidade corretamente. A tabela de produtos deveria estar escutando este sinal.
Eu também estava pensando em fazer com que a tabela de produtos enviasse um sinal personalizado após atualizar a quantidade. Se a quantidade <0 item estiver em ordem, senão "sucesso".
Eu sou novo em django e sinais, mas isso é um uso apropriado para sinais ou é a melhor maneira de fazer isso? Eu li os documentos, assisti a um vídeo sobre sinais e li alguns exemplos. Ainda estou para ver os sinais usados dessa maneira, mas não consigo pensar em nenhuma outra maneira de realizar essa tarefa.
Foi assim que acabei realizando meu objetivo, estou muito interessado em saber se essa é a maneira correta de fazer isso. Peço desculpas pelos modelos que não correspondem ao código abaixo, simplifiquei meus modelos para facilitar.
@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)