Django中的Model、Form和ModelForm
一 Model(数据库操作)
1 数据表操作
两种类型:
- Code First:创建类→自动生成表
- DB First:创建表→自动生成类 (很少用)
单表操作:
一对多:(Forienkey)
多对多:(ManytoMany)
一对一(OneToOne):
应用场景:单表特别大,字段比较多的情况,可以把单表拆成两个,做一对一对应。
2 数据行操作
- 数字
- 字符串(带正则的字段)
- 时间
- 文件
http://www.cnblogs.com/wupeiqi/articles/6216618.html
二 Form(用户请求的验证)
三 ModelForm(数据库操作和用户请求验证部分功能)
1. 定义ModelForm类
from django import forms
from app01 import models class UserModelForm(forms.ModelForm):
class Meta:
model = models.User #关联的model类
fields = "__all__" #或('name','email','user_type') #验证哪些字段,"__all__"表示所有字段
exclude = None #排除的字段
labels = None #提示信息
help_texts = None #帮助提示信息
widgets = None #自定义插件
error_messages = None #自定义错误信息(整体错误信息from django.core.exceptions import NON_FIELD_ERRORS)
field_classes = None #自定义字段类(也阔以自定义字段)
localized_fields = () #本地化,根据settings中TIME_ZONE设置的不同时区显示时间
2. ModelForm验证执行的过程
Form所有的钩子ModelForm都有。
is_valid() --> self.errors --> full_clean() --> self._clean_fields() --> clean_字段名(自定义方法)
self._clean_form() --> clean(self)
self._post_clean() (整体错误)
clean_字段名(自定义方法) 可以抛出异常
def clean_username(self):
value = self.cleaned_data['username']
if value == 'root':
return value
else:
raise ValidationError("你不是管理员!")
3. 验证
obj = UserModelForm()
obj.is_valid()
obj.errors.as_json()
obj.clean()
obj.cleaned_data
4. 创建
user_obj = models.User.objects.get(id=nid)
model_form_obj = UserModelForm(instance=user_obj)
model_form_obj = UserModelForm(request.POST)
model_form_obj.is_valid()
model_form_obj.save() #默认save(commit=True),默认保存多对多,当commit=False时可以拆分保存操作
#拆分为两步:
obj = obj.save(commit=False)
obj.save() #保存请求表数据
model_form_obj.save_m2m() #保存多对多数据
5. 更新和初始化
obj = model.tb.objects.get(id=1)
model_form_obj = XXOOModelForm(request.POST,instance=obj) #初始化
model_form_obj = XXOOModelForm(initial={...})
Django中的Model、Form和ModelForm的更多相关文章
- {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...
- day 64 Django基础十之Form和ModelForm组件
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Mod ...
- Django中的Model(字段)
Model Django中的model是用来操作数据库的,Model是一个ORM框架,我们只需要关心model的操作,而不需要关心到底是哪一种数据库. 一.基本知识: 数据库引擎: Django中自带 ...
- Django中的Model继承
Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库:还是让父 model 只包含基本的公共信息,而这些信息只能由 ...
- Django 中的 model 继承
Django 中的 model 继承和 Python 中的类继承非常相似,只不过你要选择具体的实现方式:让父 model 拥有独立的数据库:还是让父 model 只包含基本的公共信息,而这些信息只能由 ...
- Django基础十之Form和ModelForm组件
一 Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户 ...
- 12.Django基础十之Form和ModelForm组件
一 Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户 ...
- Django中的Model(操作表)
Model 操作表 一.基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = m ...
- Django中的Model(表结构)
Model(表设计) 在这里只提经常用到的三种联表结构: 一对多:models.ForeignKey(其他表) 多对多:models.ManyToManyField(其他表) 一对一:models.O ...
- django中的Model模型一:
在django的框架设计中采用了mtv模型,即Model,template,viewer Model相对于传统的三层或者mvc框架来说就相当对数据处理层,它主要负责与数据的交互,在使用django框架 ...
随机推荐
- css3 属性——calc()
其实在之前学习CSS3的时候,我并没有注意到有calc()这个属性,后来在看一个大牛的代码的时候看到了这个,然后就引发了后来的一系列的查找.学习,以及这篇博客的诞生.好了,废话不多说了,来干正事. 一 ...
- 2018-2019-2 网络对抗技术 20165332 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165332 Exp2 后门原理与实践 - 实验内容 任务一:使用netcat获取主机操作Shell,cron启动 任务二:使用socat获取主机操作Shel ...
- 谈谈WPF中的CollectionView与CollectionViewSource
https://www.cnblogs.com/zhouyinhui/archive/2007/12/07/987076.html
- bzoj1257: [CQOI2007]余数之和 整除分块
题意:给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n的值其中k mod i表示k除以i的余数.例如j(5, 3)=3 mod ...
- 【Scipy】初步认识
Scipy扩展包括多种多样的工具箱,这些工具致力于解决科学计算中的常见问题.不同的子模块对应不同的应用,比如插值, 整合, 优化, 图像处理, 统计, 特殊功能等等. scipy可以和其他的标准科学计 ...
- bzoj4129
题解: 树上+可修改莫队 莫队的每一块 可以用一个栈 每一次dfs个数>sqrt(n)(自己选的)的时候就可以跳出了 然后不要忘记分出来最后一块 代码: #include<bits/std ...
- ces
1. 测试目录 1.1. 测试目录 2. 测试目录2 2.1 测试目录
- pixi之动画
一.循环动画 let sprite; Loader.add("images/imgs.json").load(setup); function setup() { //利用oran ...
- Winform菜单之Menustrip
有窗体必定有菜单了,可以直接使用菜单组件,也可以使用按钮(按钮就没法显示级联菜单的形式了). 下面重点介绍一下各种菜单 1.Menustrip 最常用的莫过于此菜单了,从工具栏中拖入一个menustr ...
- UVA11732 "strcmp()" Anyone?【左儿子右兄弟Trie】
LINK1 LINK2 题目大意 给你一些字符串,并定义了一个函数(具体见题面) 问你把任意两个字符串放到函数里面得到的值的和是多少 思路 该怎么统计答案呢? 每次考虑当前插入的串和所有已经插入过的串 ...