我想让我的学生在登录后更新他的个人资料,但我似乎无法正确地编写个人资料更新代码。这是我的代码:
class User(AbstractUser):
pass
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
name = models.CharField(max_length=30, null=True, blank=True, default=None)
surname = models.CharField(max_length=50, null=True, blank=True, default=None)
<form method="POST" action="{% url 'profile_edit' %}" class="" >
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>q
</form>
def profile_edit(request):
user = request.student
form = StudentForm(request.POST or None, initial={'name': user.name,
'surname': user.surname})
if request.method == 'POST':
if form.is_valid():
user.student.name = request.POST['name']
user.student.surname = request.POST['surname']
user.save()
return HttpResponseRedirect('index')
context = {
"form": form
}
return render(request, "registration/profile_edit.html", context)
4条答案
按热度按时间ubbxdtey1#
错误
'AnonymousUser' object has no attribute 'name'
表示当前用户未通过身份验证。您可以使用login_required
装饰器使您的视图仅对经过身份验证的用户可用:用户模型也没有name属性,你需要访问用户的student属性来获取它:
aamkag612#
我更喜欢这个变通方法,你仍然需要login_required装饰器。
在您的www.example.com中models.py添加
然后在您的www.example.com中views.py您可以执行以下操作:
56lgkhnf3#
这是这个问题的完美答案。只需粘贴您的views.py文件,在那里您已经处理了您的更新配置文件。
记得吗
return redirect('home')
在www.example.com中定义urls.py为views.home
。在运行它之前,请确保已将其替换为视图。在www.example.com中的URL urls.py
表单的部分:
记住:
user.id
仅在用户登录时工作o0lyfsai4#
要处理这种情况,可以覆盖
UsersForm
类中的clean_username方法,并自定义验证逻辑以满足您的需求。下面是一个示例,说明如何修改表单以显示自定义错误消息而不是默认验证错误: