django - 如何在 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)
如何添加“删除”按钮和功能以允许用户删除他/提供自己的个人资料,使其不再存在于我的数据库中?
解决方案
一种解决方案可能是这样的:
@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
推荐用于“软删除”的字段,这意味着如果您想删除用户但保留与他/她相关的数据和对象,您只需要设置
推荐阅读
- javascript - 如何通过特定键过滤javascript中的对象
- javascript - 如果视频 src 更改,则无法在 iOS 上的 Cordova 应用程序中播放 HTML5 视频
- sql-server - 由于 IO 操作失败,数据库 XXXX(数据库 ID 8)的临时数据库快照已被标记为可疑
- reactjs - 在 Jest 中使用 Window 进行条件渲染
- c# - C# 表单仍然没有必填字段的帖子
- html - Bootstrap 4对齐单独对象的边距
- angular - Angular 简单表格过滤器搜索栏
- excel - 如何汇总与查找表匹配的所有条目?
- html - 更改 div css 的字体
- r - 如何在 Shiny 中跨选项卡持久化 event_data?