小编Dou*_*esh的帖子

Django: select_for_update() 关于外键关系

我用select_for_update()了很多。但是,在我使用过的所有情况下,它都是通过这样的经理来完成的:

with transaction.atomic():
    transaction = Transaction.objects.select_for_update().get(id="12345-6789-10")
    transaction.status = StatusEnum.APPROVED
    transaction.save()
Run Code Online (Sandbox Code Playgroud)

但是,我有时会通过另一个对象的引用来获取事务。

例如:

transaction = another_object.transaction
transaction.status=StatusEnum.APPROVED
transaction.save()
Run Code Online (Sandbox Code Playgroud)

^^ 这不会锁定该行。相反,我必须这样做:

transaction = Transaction.objects.select_for_update().get(id=another_object.transaction.id)
Run Code Online (Sandbox Code Playgroud)

我的问题:如果另一个对象与事务有外键关系,有没有办法在不编写 get 查询的情况下锁定事务对象?我了解在性能方面,这两个选项大致相同。只是在寻找更清洁的东西。谢谢!

django django-models django-queryset

6
推荐指数
1
解决办法
620
查看次数

标签 统计

django ×1

django-models ×1

django-queryset ×1