【发布时间】:2023-01-12 20:45:37
【问题描述】:
我有 Django 模型和视图,如下所示:(+mysql db)
class MyModel(models.Model):
name = models.CharField(max_length=100)
version = models.IntegerField(default=1, editable=False)
def updateModel(request, id):
toUpdate = MyModel.objects.get(pk=id)
if request.method=='POST':
form = MyModelForm(request.POST, instance=toUpdate)
if form.is_valid():
actual = MyModel.objects.get(pk=id)
if (actual.version == form.instance.version):
form.instance.version = form.instance.version+1
form.save()
return redirect('somewhere')
else:
#some error
form = MyModelForm(instance=toUpdate)
return render(request, 'somwhere2/createupdate.html', {'form':form})
场景是:- 当前模型值:name="aaa", version=1,
2 个用户打开编辑表单,第一个用户将名称“aaa”更改为“bbb”并保存,第二个用户将名称“aaa”更改为“ccc”并保存。结果是“ccc”,但我想要一些消息/版本冲突消息......问题是......没有冲突,因为即使第二个用户仍然可以看到“aaa”,而在数据库中有“bbb”已经...但是在单击 POST 按钮后,值首先更新为 bbb,并且版本已更新,因此代码无法看到,user2 在旧版本上工作...:(
我想要那种版本控制机制来防止这种情况,但我无法实现它......
如何实施?
我已经阅读了所有关于 django 乐观锁定等的内容,但无法实现,
【问题讨论】:
标签: django locking version optimistic