ModelForm实践--新建用户

news2024/11/29 10:40:04

Django组件Form&ModelForm_Neo_21的博客-CSDN博客

Django ModelForm用法详解

前面基本了解ModelForm,使用ModelForm添加用户

一.回顾ModelForm

基于 Model 的定义自动生成表单,这就大大简化了根据 Model 生成表单的过程。

简单的ModelForm

class BookModelForm(forms.ModelForm):
    class Meta:
        model=Book
        labels={'price':'零售价格'}
        exclude=('retail_price')

Meta 来设置必要的元数据信息,这样 Model 的元数据项不谋而合

model 指定了需要生成表单的模型对象

labels 为字典类型,用于定义表单字段的名称,当然这里大家需要注意一下,表单的名称首先默认使用 Model字段设置的 verbose_name,但是若 Model 字段没有设置该字段选项,则就可以使用 lables 设置的字段名

常用的Meta选项

fields

其为列表或元组类型,与 exclude 相反,它指定当前的表单应该包含哪些字段,如果要所有的 Model 字段都包含在表单中,可以设定 fields='__all__'。ModelForm 的定义中必须要包含 fields 或 exclude 选项,否则将会抛出异常,同时给出错误提示:

Creating a ModelForm without either the'fields'attribute or the'exclude'attribute is prohibited。

labels

其为字典类型,用于定义表单字段的名称(输入框左边显示的名称)。表单字段的名称首先会使用 Model 字段定义设置的 verbose_name,如果没有设置,则直接使用字段名。因此当没有定义 verbo se_name 时,就可以使用 labels 选项来指定字段名。例如:

labels={
'title':'标题',、
'price':'价格'
}

help_texts

其为字典类型,用于给表单字段添加帮助信息。目前页面中表单字段的帮助信息(输入框下方显示的内容)来自 Model字段的 help_texts 定义,如果没有定义则什么都不显示。help_texts 的定义方式与 labels  选项类似,例如:

help_texts={
"title":"书籍的名称"
"price':"书籍价格"
}

widgets

其为字典类型,用于定义表单字段选用的控件。默认情况下,ModelForm 会根据Model字段的类型映射表单 Field 类,因此会应用 Field 类中默认定义的 widgets。这个选项用于自定义控件类型,例如:

class Meta:
    model=UserInfo
    fields="__all__"
    widgets={'password':widgets.PasswordInput()}

二、实现新建用户

一,在path中添加url

    path('user/add/', views.user_add),

二,编写view页面,使用ModelForm

#  ####################### ModelForm示例 ################
# 使用models.py中的UserInfo
from django import forms
class UserModelForm(forms.ModelForm):
    class Meta:
        model = models.UserInfo  # 不要加()
        fields = ["name", "password", "age", "create_time", "gender", "account", "depart"]
        # widgets = {
        #     "name" = forms.TextInput(attrs={"class":"form-control"}),
        #     "password" = forms.PasswordInput(attrs={"class": "form-control"})
        # }

def user_add(request):
    """添加用户ModelForm版本"""
    if request.method == "GET":
        form = UserModelForm()
        return render(request, 'user_add.html', {"form": form})
    # post 提交数据
    form = UserModelForm(data=request.POST)
    if form.is_valid():
        form.save() # 存储到数据库
        return redirect("/user/list")

    # 校验失败
    else:
        return render(request, "user_add.html", {"form": form})

三,在html页面中引入模板,在模板区间写入表单

{% extends 'layout.html' %}
{% load static %}
{% block content %}
<div class="container">
    <div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title">新建用户</h3>
        </div>

        <div class="panel-body">
            <form method="POST" novalidate>
                {% csrf_token %}

                {% for field in form %}
                <div class="form-group">
                    <label>{{ field.label }}</label>
                    {{ field }}
                    <span style="color:red;">{{ field.errors.0 }}</span>
                </div>
                {% endfor %}

                <button type="submit" class="btn btn-info">提交</button>
            </form>
        </div>
    </div>
</div>

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jdk、jmeter安装配置流程以及 双jdk配置和切换(自用)

文章目录一、jdk安装配置1.1 java8配置流程1.2 jdk17配置1.3 jdk没有jre怎么生成1.4 双jdk配置2、Jmeter安装配置电脑重装系统了&#xff0c;重新配下jdk和jmeter。一、jdk安装配置 配jmeter首先得有java。 1.1 java8配置流程 ① java8安装路径 下完直接安装就行 ② 配置环境…

Mysql单表查询30个经典案例

单表查询&#xff08;30个例子&#xff09; 单表查询30个例子新建一个数据表gradegrade表中插入数据1、查询1945班的成绩信息2&#xff0c;查询1945班&#xff0c;语文成绩大于60小于90的成绩信息3&#xff0c;查询学生表中1到5行的数据4&#xff0c;显示1945班英语成绩为80&am…

LeetCode题解 17(55,198) 跳跃游戏,打家劫舍<动态规划>

文章目录跳跃游戏&#xff08;55&#xff09;代码解答&#xff1a;打家劫舍&#xff08;198&#xff09;代码解答&#xff1a;跳跃游戏&#xff08;55&#xff09; 这道题是让我们从数组的头部看能不能跳到数组的尾部,每次可跳的最大距离也就是目前所在的索引处的值。 思路: 这…

P3375 【模板】KMP字符串匹配——KMP

【模板】KMP字符串匹配 题目描述 给出两个字符串 s1s_1s1​ 和 s2s_2s2​&#xff0c;若 s1s_1s1​ 的区间 [l,r][l, r][l,r] 子串与 s2s_2s2​ 完全相同&#xff0c;则称 s2s_2s2​ 在 s1s_1s1​ 中出现了&#xff0c;其出现位置为 lll。 现在请你求出 s2s_2s2​ 在 s1s_1s1…

Spring中的@Value注解

文章目录**概述****使用方式**基于配置文件的注入基于非配置文件的注入注入普通字符串注入操作系统属性注入表达式结果注入其他bean属性注入URL资源概述 本文配置文件为yml文件 在使用spring框架的项目中&#xff0c;Value是经常使用的注解之一。其功能是将与配置文件中的键对应…

MANA OASIS加持,毫末算力极致优化,训练成本降低100倍

2023年1月5日&#xff0c;第七届HAOMO AI DAY在北京举办。正值岁末年初&#xff0c;中国自动驾驶届开年盛会精彩来袭。本届AI DAY上&#xff0c;毫末分享了2022年三大战役稳健收官成果&#xff0c;展望2023年全球自动驾驶发展趋势&#xff0c;并发布毫末技术、产品最新成果。 &…

基于java ssm springboot选课推荐交流平台系统设计和实现

基于java ssm springboot选课推荐交流平台系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录基于java ss…

docker 看懂这一篇文章就够了

docker就像是手机的应用商店&#xff0c;有了应用商店&#xff0c;就不用自己一个app一个app(微服务开发所需要的中间件)去百度搜索下载&#xff0c;可以在应用商店里面一键下载&#xff08;使用简单的docker命令即可&#xff09; 总之就是一句话&#xff0c;docker pull 镜像…

ubuntu20.04安装4090驱动

实验室配置了一台新主机&#xff0c;现在安装好了20.04&#xff0c;为了安装4090的驱动查找了很多资料。接下来记录一下安装4090驱动的过程&#xff0c;为方便未来安装其他的显卡驱动。 首先推荐一个视频&#xff0c;在为查找了很多资料后&#xff0c;发现这个视频讲的实在是太…

【SQL】无列名查询表中数据

目录 【SQL】无列名查询表中数据 拓展 如果mysql中 information_schema 使用不了&#xff0c;怎么查询所有的数据库名&#xff0c;表名&#xff1f; 【SQL】无列名查询表中数据 有些时候&#xff0c;我们可能获取不了mysql数据库&#xff0c;表中的字段名称&#xff0c;那么…

基于Java+SpringBoot+vue+element实现扶贫助农政策平台系统

基于JavaSpringBootvueelement实现扶贫助农政策平台系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写> 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术…

0基础快速入门Python数据挖掘

推荐教程&#xff1a;4天快速入门Python数据挖掘 课程简介 该阶段主要是介绍一些数据科学领域用Python语言实现的基础库&#xff0c;如简洁、轻便的数据可视化展示工具Matplotlib&#xff0c;高效的运算工具Numpy&#xff0c;方便的数据处理工具Pandas&#xff0c;为人工智能阶…

疑难杂症之anaconda虚拟环境安装还有anaconda无数次的卸载重装

教训&#xff1a;使用虚拟环境无数次重装& 卸载彻底删除命令&#xff1a;打开cmd --> 输入一下命令conda install anaconda -cleananaconda -clean --yes生成的备份文件夹可以删除**手动删除anaconda环境路径下的envs 和pkgs文件**然后从卸载界面点击正常卸载anaconda即…

Anaconda下载库(安装包)、创建虚拟环境等

conda install pak # 安装包&#xff0c;pak代表包名&#xff0c;可依次安装多个包或指定版本&#xff0c;包名之间空格分开&#xff1b; conda remove pak # 移除指定包 conda update pak # 更新包 conda upgrade --all # 更新所以包 conda search pak # …

【数组】leetcode59.螺旋矩阵II(C/C++/Java/Js)

leetcode59.螺旋矩阵II1 题目2 思路3 代码3.1 C版本3.2 C版本3.3 Java版本3.4 JavaScript版本4 总结&#xff1a;1 题目 题源链接 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1…

shell脚本之sed练习题

把/etc/passwd 复制到/root/test.txt&#xff0c;用sed打印所有行 #使用cp命令将/etc/passwd的内容复制到/root/test.txt中 [rootWilliam ~]# cp /etc/passwd /root/test.txt#采用sed命令将其打印出来 [rootWilliam ~]# sed -n p test.txt打印test.txt的3到10行 [rootWilliam…

都2023年了,还不知道怎么学习网络安全?来看看吧,很难找全的

前言 最近收到不少关注朋友的私信和留言&#xff0c;大多数都是零基础小友入门网络安全&#xff0c;需要相关资源学习。其实看过的铁粉都知道&#xff0c;之前的文里是有过推荐过的。新来的小友可能不太清楚&#xff0c;这里就系统地叙述一遍。 01.简单了解一下网络安全 说白…

逆向-还原代码之little-or-big (Interl 64)

// 源代码 #include <stdio.h> /* * 2016/9/29 yu liang. */ int test_one(void) { int i1; char *p(char *)&i; if(*p1) printf("Little_endian\n"); // Little_endian else printf("B…

cmake报错:Unsupported protocol

现象 最近在用cmake编译Apache arrow时&#xff0c;竟然报了错&#xff1a; 排查过程 最开始在网上直接搜“Unsupported protocol”&#xff0c;查到的说是因为安装的curl不支持https&#xff0c;需要先使用如下命令查询curl支持的协议&#xff1a; curl -V然而查出来却是…

微服务面试必问的Dubbo,这么详细还怕自己找不到工作?

前言 互联网的不断发展&#xff0c;网站应用的规模不断扩大&#xff0c;常规的垂直应用架构已无法应对。 服务化的进一步发展&#xff0c;服务越来越多&#xff0c;服务之间的调用和依赖关系也越来越复杂&#xff0c;诞生了面向服务的架构体系(SOA)&#xff0c; 也因此衍生出…