ModelForm
1.
1.views.py from django.shortcuts import render,HttpResponse from app01 import models from django import forms from django.forms import fields as F from django.forms import widgets as M #Form验证 #UserInfo->Form->BaseForm(is_valid....) #UserInfoModelForm->ModelForm-BaseModelForm->BaseForm(is_valid...) class UserInfoModelForm(forms.ModelForm): class Meta: model = models.UserInfo #指定去某个model类里面获取字段 fields = '__all__' #展示所有字段 #fields = ['username','email'] #指定展示某几列 #exclude = ['username'] #不显示哪列 # labels = { #添加输入框名称 # 'username':'用户名', # 'email':'邮箱' # } help_texts = { #添加帮助信息 'username':'请输入用户名', 'email':'请输入邮箱', } widgets = { #修改输入框相关属性 'usernmae':M.Textarea(attrs={'class':'c1'}) } error_messages = { '__all__':{}, #整体错误信息 'email':{ #自定义错误信息 'required':'邮箱不能为空' } } # field_classes={ #修改表单的正则表达式验证,此处把邮箱格式的表达式验证改成了URL的表达式验证 # 'email':F.URLField #<----只能填"类" # } #<ul class="errorlist"><li>usertype<ul class="errorlist"><li>This field is required.</li></ul></li><li>email<ul class="errorlist"><li>邮箱不能为空</li></ul></li><li>username<ul class="errorlist"><li>This field is required.</li></ul></li></ul> def index(request): if request.method=="GET": obj = UserInfoModelForm() return render(request,'index.html',{'obj':obj}) elif request.method=="POST": obj =UserInfoModelForm(request.POST) print(obj.is_valid()) #返回True print(obj.cleaned_data) #返回{'email': 'dfdfdf@153.com', 'usertype': <UserType: UserType object>, 'username': 'dfd'} print(obj.errors) #返回错误信息 <ul class="errorlist"><li>username<ul class="errorlist"><li>This field is required.</li></ul></li></ul> if obj.is_valid(): obj.save() #如果验证成功,保存现有数据到数据库 #obj.save() 等于如下内容相加的结果: #instance = obj.save(False) #instance.save() #只保存到用户表中 #obj.save_m2m() #保存到多对多关系表中 app01_userinfo_u2g return render(request,'index.html',{'obj':obj}) def user_list(request): #li=models.UserInfo.objects.all().select_related('user_type','u2g') #<---加u2g会报错 li = models.UserInfo.objects.all().select_related('usertype') return render(request,'user_list.html',{'li':li}) def user_edit(request,nid): #获取当前所有数据 #显示用户已经存在的数据 if request.method == "GET": user_obj = models.UserInfo.objects.filter(id=nid).first() mf = UserInfoModelForm(instance=user_obj) return render(request,'user_edit.html',{'mf':mf,'nid':nid}) elif request.method == 'POST': user_obj = models.UserInfo.objects.filter(id=nid).first() mf = UserInfoModelForm(request.POST,instance=user_obj) if mf.is_valid(): mf.save() else: print (mf.errors.as_json()) return render(request,'user_edit.html',{'mf':mf,'nid':nid}) 2.models.py from django.db import models class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Model): username = models.CharField(max_length=32) email = models.EmailField() usertype = models.ForeignKey(to='UserType',to_field='id') u2g = models.ManyToManyField('UserGroup') class UserGroup(models.Model): name = models.CharField(max_length=32) 3.user_edit.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="POST" action="/edit-{{ nid }}/"> {% csrf_token %} {{ mf.as_p }} <input type="submit" value="提交"> </form> </body> </html> 4.user_list.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> {% for row in li %} <li>{{ row.username }}-{{ row.usertype.caption }}-<a href="/edit-{{ row.id }}/">编辑</a></li> {% endfor %} </ul> </body> </html> 5.urls.py from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^userlist/', views.user_list), url(r'^edit-(\d+)/', views.user_edit), ]
浙公网安备 33010602011771号