ModelForm
1.7 ModelForm
-
使用Form
-
创建Form类 + 定义字段
class LoginForm(forms.Form): user = forms.CharField(label="用户名", widget=forms.TextInput) pwd = forms.CharField(label="密码", widget=forms.TextInput)
-
视图
def login(request): if request.method == "GET": form = LoginForm() return render(request, "login.html", {"form": form}) form = LoginForm(data=request.POST) if not form.is_valid(): # 校验失败 return render(request, "login.html", {"form": form}) print(form.cleaned_data) # ... return HttpRespon("OK")
-
前端
<form> {% for field in form %} <p>{{ field.label }} {{ field }} {{ field.errors.0 }}</p> {% endfor %} </form>
-
-
使用ModelForm
-
models.py
class UserInfo(models.Model): name = models.CharField(verbose_name="用户名", max_length=32) age = models.IntegerField(verbose_name="年龄") email = models.CharField(verbose_name="邮箱", max_length=128)
-
创建ModelForm
class LoginForm(forms.ModelForm): mobile = forms.CharFiled(label="手机号") class Meta: model = models.UserInfo fileds = ["name","age", "mobile"]
-
视图使用
def login(request): form = LoginModelForm() return render(request, "login.html", {"form": form})
-
页面
<form> {% for field in form %} <p>{{ field.label }} {{ field }} {{ field.errors.0 }}</p> {% endfor %} </form>
注意:
-
后续进行增伤改查是基于数据库Models中的某个表,推荐使用:ModelForm;
-
如果要进行表单校验是与数据库的表无关直接使用Form。
-
1.8 ModelForm两个好的地方
1.8.1 初始化数据
-
Form
class LoginForm(BootStrapForm, forms.Form): user = forms.CharField(label="用户名", widget=forms.TextInput) pwd = forms.CharField(label="密码", widget=forms.TextInput)
def login(request): form = LoginForm(initial={"user": "武沛齐", "pwd": "123"}) return render(request, "login.html", {"form": form})
-
ModelForm
class LoginModelForm(BootStrapForm, forms.ModelForm): mobile = forms.CharField(label="手机号", widget=forms.TextInput) class Meta: model = models.UserInfo fields = ["name", "age", "mobile"] widgets = { "age": forms.TextInput, } labels = { "age": "x2", } def clean_name(self): value = self.cleaned_data['name'] # raise ValidationError("....") return value
def login(request): user_object = models.UserInfo.objects.filter(id=1).first() form = LoginModelForm(instance=user_object, initial={"mobile": "武沛齐"}) return render(request, "login.html", {"form": form})
1.8.2 新建数据
-
Form组件
def login(request): if request.method == "GET": form = LoginForm(initial={"user": "武沛齐", "pwd": "123"}) return render(request, "login.html", {"form": form}) form = LoginForm(data=request.POST) if not form.is_valid(): return render(request, "login.html", {"form": form}) # form.cleaned_data # 手动读取字典,保存至数据库 # models.UserInfo.objects.create(name=form.cleaned_data['xx'], pwd=form.cleaned_data['yy']) return HttpResponse("成功")
-
ModelForm组件
def login(request): if request.method == "GET": form = LoginForm() return render(request, "login.html", {"form": form}) form = LoginForm(data=request.POST) if not form.is_valid(): return render(request, "login.html", {"form": form}) form.save() # 自动将数据新增到数据库 return HttpResponse("成功")
1.8.3 更新数据
-
Form组件
def login(request): if request.method == "GET": form = LoginForm(initial={"user": "武沛齐", "pwd": "123"}) return render(request, "login.html", {"form": form}) form = LoginForm(data=request.POST) if not form.is_valid(): return render(request, "login.html", {"form": form}) # form.cleaned_data # 手动读取字典,保存至数据库 # models.UserInfo.objects.create(name=form.cleaned_data['xx'], pwd=form.cleaned_data['yy']) # models.UserInfo.objects.filter(id=1).update(name=form.cleaned_data['xx'], pwd=form.cleaned_data['y']) return HttpResponse("成功")
-
ModelForm组件
def login(request): if request.method == "GET": form = LoginModelForm() return render(request, "login.html", {"form": form}) user_object = model.UserInfo.object.filter(id=1).first() form = LoginModelForm(data=request.POST, instance=user_object) if not form.is_valid(): return render(request, "login.html", {"form": form}) form.save() # 更新id=1 return HttpResponse("成功")
本文作者:Sherwin
本文链接:https://www.cnblogs.com/sherwin1995/p/18422651
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步