我想在django.auth用户上使用模型表单,但是我希望能够将PK传递给模型来管理其他用户,而不是登录用户。
是否可以执行此操作?还是需要创建常规表单?
Django管理站点不适用于我的用例。
类似的东西(当然不起作用...):
查看
def edit_user(request,pk):
if request.method == 'POST':
user_form = UserEditForm(queryset=User.objects.get(pk=pk),
data=request.POST)
if user_form.is_valid():
user_form.save()
messages.success(request, 'User updated successfully')
else:
messages.error(request, 'Error updating your profile')
else:
user_form = UserEditForm(queryset=User.objects.get(pk=pk))
return render(request, 'edit_user.html', {'user_form': user_form })
UserEdit表单
class UserEditForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email')
模板:
% block content %}
<h1>Edit User:</h1>
<p> </p>
<form action="." method="post" enctype="multipart/form-data">
{{ user_form.as_p }}
{% csrf_token %}
<p><input type="submit" value="Save changes" class="btn btn-primary"> <a href="{% url 'manage_users' %}" class="btn btn-secondary">Manage</a></p>
</form>
{% endblock %}
示例网址:profile / edit-user / 3 /
我想要用用户PK(在本例中为3)填充的表单,而不是像我自己编辑自己的个人资料那样传入instance = request.user:
查看个人资料
def user_profile(request):
if request.method == 'POST':
user_form = UserEditForm(instance=request.user,
data=request.POST)
profile_form = UserProfileEditForm(instance=request.user.profile,
data=request.POST,
files=request.FILES)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
messages.success(request, 'Profile updated successfully')
else:
messages.error(request, 'Error updating your profile')
else:
user_form = UserEditForm(instance=request.user)
profile_form = UserProfileEditForm(instance=request.user.profile)
return render(request, 'profile_edit.html', {'user_form': user_form,
'profile_form': profile_form})
对django还是很新...
感谢您的帮助。
BCBB
答案 0 :(得分:1)
您只需要获取所需的用户,然后将其作为实例参数传递给表单即可,就像您对登录用户所做的一样。
def edit_user(request, pk):
user = User.objects.get(pk=pk)
if request.method == 'POST':
user_form = UserEditForm(instance=user,
data=request.POST)
...
else:
user_form = UserEditForm(instance=user)
...