【问题标题】:Django Model not being updated after calling save() method调用 save() 方法后 Django 模型未更新
【发布时间】:2021-02-28 16:48:21
【问题描述】:

我正在使用django signals 更新模型的外键对象。

@receiver(sender=PointItem, signal=post_save)
def PointItemSaved(instance, sender, **kwargs):
    try:
        print(f"before save {user.points}")
        user = User.objects.get(id=instance.user.id)
        user.points += 100
        user.save()
        print(f"after save {user.points}")
    except Exception as e:
        print(f"there is a problem {e}")

根据日志,一切正常。

之前和之后的值是正确的。

但是当我在管理页面上检查它时它没有改变!

更新:

当我尝试从 django Admin 保存 PointItem 时它可以工作。

当我尝试从 api 调用中保存对象时会出现此问题。

【问题讨论】:

    标签: django django-models django-signals


    【解决方案1】:

    Instance 是实际的对象,试试 instance.save()

    【讨论】:

    • instance.save() 将在无限循环中进行此操作,因为 post_save 信号
    • 我试图从单个查询中获取用户以使其独立于实例
    • 用户模型是独立的,因此它不会更新实例对象。您必须将您的个人用户对象与 instance.user 对象相关联,然后您才能保存您的实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多