由另一个用户更新模型实例,但在 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.