2 つのモデルがあるとします。
class Product(models.Model):
product = model.CharField()
quantity = model.IntegerField()
class sale(models.Model)
product = models.ManyToManyField(Product)
number_sold = model. IntegerField()
販売したら、商品の数量を更新してほしいです。信号はこれを行うための最良の方法ですか?
オブジェクトが作成または更新されたときに、sale に post_save シグナルを許可させることを考えていました。更新された場合、数量を適切に調整するには、古い値と新しい値を知る必要があります。製品テーブルは、このシグナルをリッスンする必要があります。
また、数量を更新した後に製品テーブルにカスタム シグナルを送信させることも考えていました。数量 < 0 のアイテムがバック オーダーの場合、それ以外の場合は「成功」です。
私はdjangoとシグナルを初めて使用しますが、これはシグナルの適切な使用法ですか、それともこれを行うためのより良い方法ですか? ドキュメントを読み、信号に関する pycon ビデオを見て、いくつかの例を読みました。この方法で信号が使用されているのはまだ見たことがありませんが、このタスクを達成する他の方法は考えられません。
これが私の目標を達成した方法です。これがこれを行う適切な方法であるかどうかを知りたいです。モデルが以下のコードと一致しないことをお詫びします。簡単にするためにモデルを単純化しました。
@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)