django - Django 表单:在不更改用户名的情况下更新用户的属性
问题描述
我正在尝试创建一个允许用户更新其用户名或头像的表单。我遇到的问题是,如果我在不更改用户名的情况下更新个人资料图片,django 表单验证if form.is_valid()
会将表单识别为无效,因为用户名已经存在于数据库中。我正在使用更新视图,但我不确定我是否正确实现了它。
当我尝试在不更改用户名的情况下更新头像时,我会从以下行中看到“表单无效”的页面:HttpResponse("Form is invalid")
. 是否有解决方法来删除表单验证?我尝试删除 if form.is_valid():
但收到错误'User_form' object has no attribute 'cleaned_data'
。
我觉得必须有一种我无法找到的简单方法来解决这个问题,因为很多网站一次只允许您更新一个属性。
视图.py
model = User
form = User_form
fields = ['username', 'avatar']
template_name_suffix = '_update_form'
def update_profile(request, user_id):
if request.method == "POST":
form = User_form(request.POST, request.FILES)
if form.is_valid():
user = User.objects.get(pk=user_id)
username = form.cleaned_data['username']
avatar = form.cleaned_data['avatar']
if username != user.username:
user.username = username
if avatar != user.avatar:
if avatar:
user.avatar = avatar
user.save()
return redirect('index')
else:
return HttpResponse("Form is invalid")
模型.py
class User(AbstractUser):
followed_by = models.ManyToManyField("User", blank=True, related_name="following")
avatar = models.ImageField(upload_to='profilepics/', verbose_name='Avatar', null=True, blank=True)
class User_form(ModelForm):
class Meta:
model = User
fields = ['username', 'avatar']
user_update_form.html
<form action="/profile/{{user.id}}/update" method="post" enctype='multipart/form-data'>
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update">
</form>
解决方案
推荐阅读
- javascript - jQuery AJAX 因表单请求中的文件而失败
- c# - Razor Pages - 将抽象类传递给期望接口的 Html.Partial 会引发错误
- pdf - itextsharp 冲压表格 pdf 到其他 pdf
- java - Junit中的InvalidUseOfMatchersException
- mysql - 如何在 1 列中选择必须在另一列中有 2 个值的值 - sql?
- javascript - 如何将 vuetify 骨架加载器绑定到 v-image 加载事件
- node.js - 无法使用 pm2 运行节点应用程序
- python - C++ 算法到 Python
- java - Spring批量选择基于指定来源的项目阅读器数据提供者
- python - 为什么使用 Chromium 的 python selenium 中的 headless 不起作用?