ModelForm

news/2024/11/15 18:38:31/文章来源:https://www.cnblogs.com/sherwin1995/p/18422651

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.UserInfofileds = ["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.UserInfofields = ["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=1return HttpResponse("成功")
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/800571.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Java对象结构

一、Java对象结构 实例化一个Java对象之后,该对象在内存中的结构是怎么样的?Java对象(Object实例)结构包括三部分:对象头、对象体和对齐字节,具体下图所示1、Java对象的三部分 (1)对象头 对象头包括三个字段,第一个字段叫作Mark Word(标记字),用于存储自身运行时的…

Kyutai 开源对话模型 Moshi;李飞飞空间智能公司已筹集超过 2.3 亿美元丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点…

P3224 [HNOI2012] 永无乡

题意思路 用并查集维护连通性,每个集合维护一个平衡树,每次合并两个集合的时候,将一个平衡树的节点一个一个加入到另一个中。 这么做不会超时,每次将小的平衡树拆掉放到大的中,可以证明不会超过 \(O(\log n)\) 次。 总时间复杂度 \(O(n \log ^ 2 n)\)。 代码 #include <…

C#使用HttpWebRequest读取网站内容遭遇503错误

本人多年编程小白,天生编程白痴体质。大家莫见笑。 自己用C#写了一段代码,使用HttpWebRequest,通过SOHU的API接口获取指定股票的交易信息。 该段代码一直运行正常。最近开始报错。 详细信息如下: System.Net.WebException HResult=0x80131509 Message=远程服务器返回错误: (…

算法随笔——wqs二分

学习链接 学习链接 应用条件选择恰好 \(x\) 个物品,求最优值 设 \(x\) 对应最优值 \(f_x\) ,\((x,f_x)\) 在图像上呈现为凸包。 无数量限制问题简单可做问题转化 有 \(n\) 个物品,恰好选 \(m\) 个,计算最优值。 做法例题 模版题:P2619

modbus设备数据 转 profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 设置网关采集MODBUS从站数据 2 5 用PROFINET IO协议转发数据 8 6 案例总结 10 1 案例说明设置网关采集Modbus设备数据 把采集的数据转成profinet IO协议转发给其他系统。2 VFBOX网关工作原理 VFBOX网关是协议转换网关,…

WPF开发 direct3d11 调试报错

环境:VS2022 WPF Win11 过程:准备调试d3d11着色器转换nv12->rgb的过程 报错信息:DXGI_ERROR_SDK_COMPONENT_MISSING 应用程序请求的操作依赖于已缺失或不匹配的 SDK 组件。 解决方案::需要在自己电脑中进行设置 【设置】-【系统】-【可选功能】-【查看功能】-【图形工具…

Cloudera安装指南:打造你的大数据基础环境

Cloudera manage系统环境准备、基础环境安装、集群部署以及应用组件安装等全方位的技术运维内容。无论您是初学者还是资深工程师,都能在这里找到适合自己的学习资料和实战经验。我们致力于为您提供最新、最全面的Cloudera大数据技术运维知识,帮助您轻松应对各种技术挑战。Clo…

uni-app上架ios语言设置

客户反馈了一个问题,日文的应用上架后在商店中,却显示了其他语言,解决方案如下 1.添加要设置的语言2.最重要的一步,在 app-plus 中添加下述代码 name 是app名称"app-plus" : {"locales" : {"ja" : {"name" : "xxx","…

【算法】topk之字节题

1. 合并两个有序列表 🔗 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1:输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] …

flink 启动Job加载外部jar都有哪些方法?

flink 启动Job加载外部jar都有哪些方法 在 Apache Flink 版本中,启动 Job 时加载外部 Jar 包有几种不同的方法。这些方法允许用户引入自定义的 UDF(用户定义函数)或其他依赖项。以下是几种常见的方法: 1.使用 flink run 命令直接启动 你可以通过命令行工具 flink run 来指定…

切片器110-112

透视表切片器抓照片场景描述 针对产品汇总分析数据透视表,制做数据看板,样例如下所示:具体操作制作产品汇总分析数据透视表插入选项卡——勾选雇员——确定——插入选项卡——插入二维柱状图——将数据透视表右侧雇员拖拽到筛选字段——在空白单元格输入INDIRECT函数和MATCH…