将PK传递到模型形式(未登录用户)

时间:2018-07-27 17:59:19

标签: django django-forms

我想在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>&nbsp;</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"> &nbsp; &nbsp; &nbsp; <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

1 个答案:

答案 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)
    ...