繁体   English   中英

Django:如何在每次更新另一个模型实例时自动更新模型实例

[英]Django: How to automatically update a model instance everytime another model instance is updated

在网上商店项目中,我有一个名为 Order 的模型(该模型存储订单实例)和一个名为 Points 的模型。 模型 Points 存储用户在下订单时收集的奖励积分。 但是订单可能会被取消,所以我希望能够监控订单何时被取消(模型订单实例的状态被更改为“已取消”)以便拿走积分。 我怎样才能做到这一点?

使用 Django 信号: https ://docs.djangoproject.com/en/4.0/ref/signals/#django.db.models.signals.post_save

您可以检测到 Order 实例已保存以及确切更新了哪个字段,然后在发生这种情况时执行一些逻辑。

例子:

from django.db.models.signals import post_save
from django.dispatch import receiver
from myapp.models import Order


@receiver(pre_save, sender=Order)
def post_save_order_handler(sender, instance, created, **kwargs):
    if not created:
    for item in iter(kwargs.get('update_fields')):
        if item == 'status' and instance.status == "cancelled":
           # do something here

或者您可以类似地使用pre_save信号并在保存之前检查状态是否从某个有效状态更改为取消。

你能分享你的模型和功能吗? 您可以使用下订单和取消订单功能轻松实现另外两个查询来维护用户的积分。 例如

def place_order(request):
       Order.objects.create()
       Point.objects.create(user_id=user_id,points="10")

反之亦然,用于取消订单更新状态,并将点数从总数更新为 0 或减去。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM