由另一个用户更新模型实例,但在 Django 中保持创建者名称不变
Update model instance by another user but keep originator name unchanged in Django
我正在学习和从事特定项目,我允许同一模型中的少数用户(发起人、审阅人和批准人)在不同状态(启动(草案))期间使用 model.forms 更新模型、审批)。
我在启动阶段没有问题,因为发起者是进行模型更新的同一用户。我正在努力解决的问题似乎发生在审查和批准阶段,这使我的模型得到更新,但是如果我调用:
def update_eq(request, pk):
___rest of the code___
if eq.eq_status == 'Draft':
form = EqForm(request.POST or None, instance=eq)
if form.is_valid():
eq.initiator = request.user
form.save()
___rest of the code___
[解决方案] 根据 Willem 的评论我更新了视图...
elif eq.eq_status == 'Review':
form = EqForm(request.POST or None, instance=eq)
if form.is_valid():
# eq.initiator = request.user
form.save()
___rest of the code___
但是,一旦我更改状态,即进入审查或批准阶段并进行相同的更新,即调用以保存表单,我将启动器字段更新为 'None' 值。
有什么方法可以让非发起者更新模型,但仍将模型原始发起者保持为当前发起者?
您正在编辑 Eq
实例,这意味着实例已经创建,因此 initiator
不需要是 set/updated.因此,您可以删除视图中的 eq.initiator = request.user
行:
def update_eq(request, pk):
# rest of the code …
if eq.eq_status == 'Draft':
form = EqForm(request.POST or None, instance=eq)
if form.is_valid():
# <strong>no</strong> eq.initiator = request.user
form.save()
return redirect('<em>name-of-some-view</em>')
# …
Note: In case of a successful POST request, you should make a redirect
[Django-doc]
to implement the Post/Redirect/Get pattern [wiki].
This avoids that you make the same POST request when the user refreshes the
browser.
我正在学习和从事特定项目,我允许同一模型中的少数用户(发起人、审阅人和批准人)在不同状态(启动(草案))期间使用 model.forms 更新模型、审批)。 我在启动阶段没有问题,因为发起者是进行模型更新的同一用户。我正在努力解决的问题似乎发生在审查和批准阶段,这使我的模型得到更新,但是如果我调用:
def update_eq(request, pk):
___rest of the code___
if eq.eq_status == 'Draft':
form = EqForm(request.POST or None, instance=eq)
if form.is_valid():
eq.initiator = request.user
form.save()
___rest of the code___
[解决方案] 根据 Willem 的评论我更新了视图...
elif eq.eq_status == 'Review':
form = EqForm(request.POST or None, instance=eq)
if form.is_valid():
# eq.initiator = request.user
form.save()
___rest of the code___
但是,一旦我更改状态,即进入审查或批准阶段并进行相同的更新,即调用以保存表单,我将启动器字段更新为 'None' 值。
有什么方法可以让非发起者更新模型,但仍将模型原始发起者保持为当前发起者?
您正在编辑 Eq
实例,这意味着实例已经创建,因此 initiator
不需要是 set/updated.因此,您可以删除视图中的 eq.initiator = request.user
行:
def update_eq(request, pk):
# rest of the code …
if eq.eq_status == 'Draft':
form = EqForm(request.POST or None, instance=eq)
if form.is_valid():
# <strong>no</strong> eq.initiator = request.user
form.save()
return redirect('<em>name-of-some-view</em>')
# …
Note: In case of a successful POST request, you should make a
redirect
[Django-doc] to implement the Post/Redirect/Get pattern [wiki]. This avoids that you make the same POST request when the user refreshes the browser.