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框架 ...
随机推荐
- ActiveMQ---知识点整理
本文来自于csdn,文章通过介绍ActiveMQ的安装,使用,搭建等等,简单整理了ActiveMQ. 本文转自:http://www.uml.org.cn/zjjs/201802111.asp 一.背 ...
- vue全家桶实现笔记本功能
一个通过vue实现的练手小项目,数据保存和导出通过node进行处理 成品截图: 安装vue-cli,webpack: cnpm install webpack -g cnpm install vue- ...
- bzoj2705: [SDOI2012]Longge的问题 欧拉定理
题意:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). 题解:考虑n的所有因子,假设有因子k,那么对答案的贡献gcd(i,n)==k的个数即gcd(i/k,n/k)== ...
- UVA-10285 Longest Run on a Snowboard (递推)
题目大意:滑雪.给一个二维数组,找出最长的连续下降序列的长度. 题目分析:定义dp(i,j)表示以a[i][j]结尾的最长连续下降序列的长度,则dp(i,j)=max(dp(i-1,j),dp(i+1 ...
- java通过文件头来判断文件类型
import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; import java.ut ...
- 235.236. Lowest Common Ancestor of a Binary (Search) Tree -- 最近公共祖先
235. Lowest Common Ancestor of a Binary Search Tree Given a binary search tree (BST), find the lowes ...
- Hadoop1.2.1完全分布模式安装教程
假设有三台机器,它们的IP地址和对应的主机名为: 192.168.12.18 localhost.localdomain 192.168.2.215 rhel5 ...
- 为了更好更方便地活着——爱上private
刚开始接触OOP的时候,打心底里我不喜欢private与protected.我声明一个public然后不直接用它,不就跟private一样吗?在某些场合下,我还能偷偷地用一下public变量,这不是更 ...
- L178 smart meter watchdog
There is "no realistic prospect" of the government meeting its own deadline to install sma ...
- PCB 中过孔和通孔焊盘的区别
在PCB设计中,过孔VIA和焊盘PAD都可以实现相似的功能.它们都能插入元件管脚,特别是对于直插DIP)封装的的器件来说,几乎是一样的. 但是!在PCB制造中,它们的处理方法是不一样的. 1.VIA的 ...