努力使用具有相同功能视图的两个表单,将其连接到特定的配置文件



首先,我有一个名为Account的模型,它通过一对一的字段与Django的本机用户模型相关联。我正在构建一个管理面板,目标是能够通过其后端个人资料页面上的表单编辑注册帐户(用户)信息。

我已经设法使用两个表单(用于更改用户模型的表单和用于更改帐户模型的表单)创建了一个视图,但由于实例是request.user的,我只能在不同的配置文件上编辑自己的信息。我不确定如何将帐户的 pk 绑定到代码中。

例如,最终目标是:http://path/to/user/profile/1 - 能够编辑帐户 1 的信息http://path/to/user/profile/2 - 能够编辑帐户 2 的信息

我试图将pk添加到测试的定义中,但没有运气。

urls.py

urlpatterns = [
       path("test/<int:pk>", views.test, name="test"),
] 

views.py

def test(request, pk):
    if request.method == 'POST':
        u_form = UserEditPersonalForm(request.POST, instance=request.user)
        a_form = AccountEditPersonalForm(request.POST, instance=request.user.account)
        if u_form.is_valid() and a_form.is_valid():
            u_form.save()
            a_form.save()
            messages.success(request, f'Account updated')
            return redirect('/cms/test/')
    else:
        u_form = UserEditPersonalForm(instance=request.user)
        a_form = AccountEditPersonalForm(instance=request.user.account)
    context = {
        'u_form': u_form,
        'a_form': a_form
    }
    return render(request, 'cms/test.html', context)
这与

"在同一个基于函数的视图中使用两种形式"没有任何关系。请为您的问题提供一个实际涉及您的问题的标题,即您要编辑给定用户的详细信息而不是登录用户的详细信息。

解决方案只是获取相关用户并将其作为实例参数传递给表单,而不是request.userrequest.user.account

def test(request, pk):
    user = User.objects.get(pk=pk)
    if request.method == 'POST':
        u_form = UserEditPersonalForm(request.POST, instance=user)
        a_form = AccountEditPersonalForm(request.POST, instance=user.account)
        if u_form.is_valid() and a_form.is_valid():
            ...
    else:
        u_form = UserEditPersonalForm(instance=user)
        a_form = AccountEditPersonalForm(instance=user.account)
    ...

最新更新