【发布时间】:2017-01-22 10:12:20
【问题描述】:
我在 Django REST 框架应用程序中遇到这种情况:
我有一个删除视图:
def delete(self, request, pk, lid=None, *args, **kwargs):
user_info = self.get_object(pk)
if user_info:
location = Location.objects.filter(loc_id=lid).first()
location.users.remove(user_info)
if location.users.count() is 0:
//delete location
return Response(status=status.HTTP_200_OK)
return Response(status=status.HTTP_404_NOT_FOUND)
我认为在这段代码中有一个潜在的关键部分:
流 - 1:检查计数位置用户 -> 计数为 0
流程 - 2:将新用户 (user2) 添加到位置用户(通过其他视图)
flow - 1:删除位置,因为位置用户为 0(但这不正确,因为 flow-2 添加了新的 user_info)。
Django中是否可以有这个部分(检查值和删除操作)
location = Location.objects.filter(loc_id=lid).first()
location.users.remove(user_info)
if location.users.count() is 0:
//delete location
原子地?
【问题讨论】:
标签: python django orm transactions critical-section