首先,我有一个名为Account的模型,该模型通过一对一字段绑定到Django的本机User模型。我正在建立一个管理面板,其目的是能够通过其后端个人资料页面上的表单来编辑注册的帐户(用户)信息。
我设法使用两种形式(用于更改用户模型的表单和用于更改帐户模型的表单)创建视图,但是由于实例为request.user
,因此我只能编辑自己的视图有关不同配置文件的信息。我不确定如何将帐户pk绑定到代码中。
例如,最终目标是: http://path/to/user/profile/1-能够编辑帐户1的信息 http://path/to/user/profile/2-能够编辑帐户2的信息
我试图将pk添加到test的定义中,但是没有运气。
urlpatterns = [
path("test/<int:pk>", views.test, name="test"),
]
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)
答案 0 :(得分:0)
这与“在同一基于函数的视图中使用两种形式”无关。请给您的问题一个标题,该标题实际上是指您的问题,即您要编辑给定用户的详细信息,而不是已登录的详细信息。
解决方案只是获取相关用户并将其传递,而不是将request.user
和request.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)
...