nav.html中的编辑信息【用户名,密码,确认密码(在表中多加列,比如性别年龄等)】
可以看到和注册是一样的input框,所有该ModelForm继承自注册那里编写号的类,不同之处是用户名要显示在第一条input框中
提交时
- 要确保更改后的用户名不会与其他用户名一致
- 要确保不更改用户名时不会查重
重写__init__方法,传递username与id【在index中添加request.session['userid']】
【username是给input框添加value值,id是排除该条数据之后的查重结果】
def personal(request):#input框里是存在数据的
userid=request.session['userid']
if request.method == 'GET':
fm=PModelForm(username=request.session['user'],userid=userid)#向ModelForm中传入值
return render(request,'person.html',{'form':fm})
fm=PModelForm(data=request.POST,userid=userid)
if fm.is_valid():
models.Commodity.objects.filter(id=userid).update(username=fm.cleaned_data['username'],password=fm.cleaned_data['password'])
return redirect('/index/')
return render(request,'person.html',{'form':fm})
class PModelForm(RModelForm):
def __init__(self, *args, username=None,userid, **kwargs):
super().__init__(*args, **kwargs)
self.userid=userid
if username is not None:
self.fields['username'].initial = username
for name, field in self.fields.items():
field.widget.attrs['class'] = 'form-control'
field.widget.attrs['placeholder'] = field.label
def clean_username(self):
txt_user = self.cleaned_data["username"]#这里的username是post请求后的数据,看不到
#排除原有id基础上在筛选
exits = models.Commodity.objects.exclude(id=self.userid).filter(username=txt_user).exists()
if exits:
raise ValidationError("账号已被注册")
return txt_user
拆分类,路径
在前面,class与def都在views.py中,看起来很多,先将类提取出来
在app01下建立utils目录,建立一个.py文件(form.py),将所有的class剪切进去,views中只留下def,并进行对接
现在views.py中只剩下了def,又分为客户和商业,拆分def【示范】
拆分完成后,删掉views.py文件【urls导入会冲突】
from app01.views import customer#在urls.py替换views.py的导入
重新启动即可