首页 > 解决方案 > 如何在 Django 应用程序的用户配置文件模板中添加“删除”按钮,以便用户可以从应用程序中删除他/她的配置文件?

问题描述

我有一个应用程序登录/注销系统,一旦用户注册,我就会在其中自动生成用户配置文件。我的 Profile.html 看起来像这样:

<div class="col s12">
  <form method="POST">
  {% csrf_token %}
     <fieldset class="">
        <legend class="">Profile Info</legend>
        {{ u_form.username }}
        {{ p_form.postcode }}
     </fieldset>
     <div class="col s6">
       <button class="btn" type="submit">Update</button>
      </div>
   </form>
 /div>

和我的个人资料功能来自这样的视图:

@login_required
def profile(request):
    if request.method == "POST":
        u_form = UserUpdateForm(request.POST, instance=request.user) 
        p_form = ProfileUpdateForm(request.POST, instance=request.user.profile)
        if u_form.is_valid() and p_form.is_valid():
            u_form.save()
            p_form.save()
            messages.success(request, f"Account updated!")
            return redirect('profile')
    else:
        u_form = UserUpdateForm(instance=request.user)
        p_form = ProfileUpdateForm(instance=request.user.profile)

    context = {"u_form": u_form, "p_form": p_form}

    return render(request, "users/profile.html", context)

如何添加“删除”按钮和功能以允许用户删除他/提供自己的个人资料,使其不再存在于我的数据库中?

标签: djangodjango-templatesdjango-views

解决方案


一种解决方案可能是这样的:

@login_required
def delete_profile(request):
  if request.method == 'POST':
    ProfileModel.objects.get(user=request.user).delete()
    # redirect to some success url
  else:
    # access denied

这只会删除配置文件,而不是用户。如果你想删除用户,你可以像我对配置文件所做的那样做,但是,如果你有用户和配置文件之间的关系,delete=CASCADE你只需要删除用户,配置文件就会被数据库自动删除。

稍后您需要在 urls.py 文件中添加此视图的 url,并在您的模板中添加一个表单以转到该视图,如下所示:

<form method="POST" action="{% url 'your_url_name' %}">
   {% csrf_token %}
   <button type="submit">Delete</button>
</form>

用户有一个is_active推荐用于“软删除”的字段,这意味着如果您想删除用户但保留与他/她相关的数据和对象,您只需要设置


推荐阅读