首页 > 其他分享 >ModelForm

ModelForm

时间:2024-09-20 15:45:52浏览次数:1  
标签:return form data request forms login 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})
    

    image-20230723150403418

  • 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})
    

    image-20230723150857039

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("成功")
    

标签:return,form,data,request,forms,login,ModelForm
From: https://www.cnblogs.com/sherwin1995/p/18422651

相关文章

  • orm中使用modelForm添加数据
    ModelForm可以简化表格数据输入的流程,还能对输入的数据进行校验。1.在views.py中创建ModelForm的类fromdjangoimportformsclassUserModelForm(forms.ModelForm):name=forms.CharField(min_length=3,label='用户名')这是校验条件,相当于限制了后续输入新的数据时,其中的......
  • 【django学习-21】ModelForm方式,自定义数据校验
    前言:我们在使用ModelForm新增数据时,除了使用默认的数据校验之外,还可以自定义数据校验例如:有个靓号的列表,新增/编辑校验1.代码示例1.1:modles.pyclassPrettyNum(models.Model):"""靓号表"""mobile=models.CharField(verbose_name="手机号",max_length=11)......
  • 【django学习-20】新增用户(ModelForm方式)
    1.什么是ModelForm?ModelForm顾名思义就Form和Django的Model数据库模型结合体,可以简单、方便得对数据库进行增加、编辑操作和验证标签的生成;比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应......
  • 深入理解Django的ModelForm操作
    深入理解Django的ModelForm操作原文链接:https://www.cnblogs.com/shenjianping/p/11562148.html一、ModelForm的使用顾名思义,ModelForm就是将Model与Form进行绑定,Form有自动生成表单的作用,但是每一个forms字段需要自己手动填写,而Model就是数据库表包含了所有的数据字段。所以M......
  • 【20.6】Django框架Form组件之模型表单ModelForm
    【一】引入如果你正在构建一个数据库驱动的应用,那么你可能会有与Django的模型紧密映射的表单。比如,你有个BlogComment模型,并且你还想创建一个表单让大家提交评论到这个模型中。在这种情况下,写一个forms.Form类,然后在表单类中定义字段,这种一般创建表单的做法是冗余的,因为你已经......
  • Django 中使用ModelForm生成HTML标签
    在Django中,使用ModelForm来生成HTML表单标签是一种常见且高效的做法。ModelForm可以自动根据模型的字段生成对应的表单字段,这大大简化了表单的创建和处理过程。以下是如何在Django中使用ModelForm来生成HTML标签的基本步骤:步骤1:创建ModelForm首先,你需要为你的模型......
  • ModelForm基类:添加bootstrap新式
    fromdjangoimportformsclassBootStrapModelForm(forms.ModelForm): def__init__(self,*args,**kwargs): super().__init__(*args,**kwargs) #循环ModelForm中的所有字段,给每个字段的插件设置 forname,fieldinself.fields.items(): #字段中有属性,保留原......
  • 为ModelForm自动生成的input框添加BootStrap样式
    为了方便管理,我们在/app01/utils下新建bootstrap.pyfromdjangoimportformsclassBootStrapModelForm(forms.ModelForm):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)#循环找到所有的插件,添加class="form-control"样......
  • Form和ModelForm组件
    1.为什么使用form和modelform1.1不使用form时 当不用form时,想校验浏览器发来的数据需要使用很多request.Post.get拿到信息,再写函数进行逐个校验1.2使用form 不用再在视图函数内进行校验 Form功能:数据校验,自动生成HTML对应的标签,初始化 ......
  • 使用form.ModelForm组件注意点
    定义类时是使用model=table中表名如下:classTplModelForm(BootStrapModelForm):classMeta:model=models.Templatefields="__all__"而在函数中定义时是使用form如下deftpl(request):ifrequest.method=="GET":form=TplModelForm() ......