【发布时间】:2019-07-11 07:31:18
【问题描述】:
我使用 django 用户模型创建了一个注册表单,并添加了一个额外的字段 confirm_pwd。我创建了一个编辑页面来编辑特定用户的详细信息。编辑后我需要在个人资料页面中显示个人资料详细信息。我也创建了个人资料页面。但它仅在用户注册或登录时显示。当我编辑详细信息后单击保存按钮将重定向到个人资料页面。此时个人资料页面不显示详细信息。这是我的代码
models.py
from django.db import models
from django.contrib.auth.models import User
class UserProfileInfo(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
def __str__(self):
return self.user.username
forms.py
from django import forms
from django.forms import ModelForm
from .models import UserProfileInfo
from django.contrib.auth.models import User
class EditProfileForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
confirm_pwd = forms.CharField(widget=forms.PasswordInput())
class Meta():
model = User
fields = ['first_name','last_name','username','email','password']
help_texts={
'username': None
}
def clean(self):
cleaned_data = super(EditProfileForm, self).clean()
password = cleaned_data.get("password")
confirm_password = cleaned_data.get("confirm_pwd")
print(confirm_password)
if password != confirm_password:
print("yes")
raise forms.ValidationError(
"password and confirm_password does not match"
)
views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from .models import UserProfileInfo
from django.contrib.auth.models import User
from .forms import UserForm,UserProfileInfoForm,GithubInfo,EditProfileForm
from django.contrib.auth import authenticate, login, logout
from django.urls import reverse
@login_required
def edit_profile(request):
if request.method == 'POST':
form = EditProfileForm(request.POST, instance=request.user)
if form.is_valid():
user = form.save(commit=False)
user.set_password(form.cleaned_data['password'])
user.save()
return HttpResponseRedirect(reverse('signupapp:profile'))
else:
form=EditProfileForm(instance=request.user)
return render(request, "signupapp/edit_profile.html", {'form':form })
edit_profile.html
<form method="POST" action="" class="" >
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>
</form>
profile.html
{% if user.is_authenticated %}
<h1>Welcome!</h1>
<h3>Firstname: {{ user.first_name }}</h3>
<h3>Lastname: {{ user.last_name }}</h3>
<h3>Username: {{ user.username }}</h3>
<h3>Email: {{ user.email }}</h3>
<a href="{% url 'signupapp:edit' %}"><input type="button" value="Edit"/></a>
<a href="{% url 'signupapp:delete' request.user.id %}"><input type="button" value="Delete"/></a><br>
<br>
{% else %}
<h3>Register or Login if you'd like to</h3>
{% endif %}
当我在服务器中运行此代码时,个人资料页面不显示用户详细信息。
我怎样才能做到这一点。 提前致谢。
【问题讨论】:
标签: django