Model&Form&ModelForm拾遗
Model&Form&ModelForm拾遗
一、Model&Form&ModelForm
- Model:用于用户请求数据的验证(针对性弱),但有强大的数据库操作
- Form:强大的数据验证(用于用户请求数据)
- ModelForm:强大的数据验证,适中的数据库操作。用于数据库操作(只针对部分操作);用于用户请求的验证(只针对部分操作)
二、Model操作:
数据表操作(ORM关系对象映射)
Code First 创建类:自动生成表
DB First 创建表:自动生成类
表的一对多操作:ForiegnKey
class user(models.Model):
name = models.CharField(max_length=10)
t = models.ForeignKey('usertype')
class usertype(models.Model):
name = models.CharField(max_length=10)
表的多对多操作:
第一种方式
#创建第三张表Favor然后使用ForiegnKey上下链接
class new(models.Model):
title = models.CharField(max_length=10)
class user(models.Model):
name = models.CharField(max_length=10)
t = models.ForiegnKey('usertype')
class Favor(models.Model):
new = models.ForeignKey('new')
user = models.ForeignKey('user')
第二种方式:比较方便(好处很多,主要是在Django的admin中会自动形成下拉框等关联操作)
#创建ManyToManyField关系不创建第三张表,表中不增加任何列
#ManyToManyField还有参数
class new(models.Model):
title = models.CharField(max_length=10)
favor = models.ManyToManyField('user')
class user(models.Model):
name = models.CharField(max_length=10)
t = models.ForeignKey('usertype')
第三种方式:使用参数关联
class new(models.Model):
title = models.CharField(max_length=10)
favor = models.ManyToMany('user',
through="Favor",through_fields=("new","user"))
class user(models.Model):
name = models.CharField(max_length=10)
t = models.ForiegnKey('usertype')
class Favor(models.Model):
new = models.ForiegnKey('new',related_name="n") #正向查找使用new,反向查找使用n
user = models.ForiegnKey('user',related_name="u")
#正向查找是通过new 来查询new表中的数据,反向查找是通过n 来查询Favor表中的数据
表的一对一操作:
#注:一对一关系指的是表中数据一对一关系,而不是表的一对一关系
#缺点:当表中列特别多的时候可能会出现错误
class new(models.Model):
title = models.CharField(max_length=10)
favor = models.ManyToMany('user',
through="Favor",through_fields=("new","user"))
class user(models.Model):
name = models.CharField(max_length=10)
t = models.ForiegnKey('usertype')
class Favor(models.Model):
new = models.ForiegnKey('new',related_name="n") #正向查找使用new,反向查找使用n
user = models.ForiegnKey('user',related_name="u")
#userdetail = models.ForiegnKey('UserDetail',unique=True)#相当于OneToOneField
userdetail = models.OneToOneField('UserDetail')
#正向查找是通过new 来查询new表中的数据,反向查找是通过n 来查询Favor表中的数据
class UserDetail(models.Model):
pwd = models.CharField(max_length=32)
注:model的错误验证和参数的用法与Form有差别
连表操作:但是会影响性能
select_related:主动连表操作
多次sql语句然后拼接:
prefetch_related
参数操作
model具体详细请看转载链接(此链接为转载,详细了解请百度路飞学城):https://www.cnblogs.com/wupeiqi/articles/6216618.html
数据库可以使用同步功能,写读分离,写是一个数据库1,读是一个数据库2,然后把两个数据库同步,写入数据时在数据库1执行操作,读取数据时在数据库2进行操作。
三、Form操作:
model具体详细请看转载链接(此链接为转载,详细了解请百度路飞学城):https://www.cnblogs.com/wupeiqi/articles/6144178.html
四、ModelForm操作:
ModelForm具体详细请看转载链接(此链接为转载,详细了解请百度路飞学城):https://www.cnblogs.com/wupeiqi/articles/6229414.html
Model&Form&ModelForm拾遗的更多相关文章
- Django的model form组件
前言 首先对于form组件通过全面的博客介绍,对于form我们应该知道了它的大致用法,这里我们需要明确的一点是,我们定义的form与model其实没有什么关系,只是在逻辑上定义form的时候字段名期的 ...
- model.form使用,配合form的钩子
一次model.form的使用记录,配合form钩子的过程 在写信息采集功能的时候,需要添加资产信息,使用modelform组件减少工作量 官网介绍:版本1.9.https://docs.django ...
- Django Model Form
ModelForm ModelForm结合了Form和Model,将models的field类型映射成forms的field类型,复用了Model和Model验证, 写更少的代码,并且还实现了存储数据 ...
- Django之路12——form modelform formset modelformset的各种用法
首先上结论: form适用于对单个表单的操作,并且需要对每个字段的验证规则自定义. modelform:适用于对用户提交的单个表单操作,字段可以用model中的表的字段来作为验证规则,适用于快速的 ...
- python3-开发进阶Django-form组件中model form组件
Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样 ...
- Django 的 model form 组件
Django 的 model form 组件 Model Form 组件的由来 之前介绍过 Django 的 Form 组件(Django的Form表单)使用方法,Form 组件能够帮我们做三件事: ...
- 14 Django之Form和Model Form组件
一.什么是Form 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用 ...
- form modelform formset modelformset的各种用法
form modelform formset modelformset的各种用法 首先上结论: form适用于对单个表单的操作,并且需要对每个字段的验证规则自定义. modelform:适用于对用 ...
- model form
ModelForm 能允许我们通过一个 Model 直接创建一个和该模型的字段一一对应的表单,大大方便了表单操作. 下面来看一个例子. 首先我们有这样的 model: from django.db i ...
随机推荐
- python 元组 列表 字典
type()查看类型 //取整除 **幂 成员运算符: in x在y序列中,就返回true 反之 not in 身份运算符: is is not 逻辑运算符 and or not 字符编码 问题 ...
- R语言函数化学习笔记4
条件语句和循环语句 当你说话时候用到了如果,此时条件出现了 举个条件函数的例子 sign_t<-function(x){ if(x>0){ return(1) }else if(x< ...
- 合唱队形【dp】
链接:https://ac.nowcoder.com/acm/contest/1082/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言2621 ...
- Hadoop的完全分布式搭建
一.准备虚拟机两台 1.将虚拟机进行克隆https://www.cnblogs.com/the-roc/p/12336745.html 2.1将克隆虚拟机的IP修改一下 vi /etc/sysconf ...
- 解决pjax重复绑定
个人博客 地址:http://www.wenhaofan.com/article/20180929002529 1.所有js统一在pjax容器外引入 在pjax容器外引入的js只会被引入一次,所以不会 ...
- 【Unity|C#】基础篇(5)——分部类与分部函数(partial)
[学习资料] <C#图解教程>(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.c ...
- ubuntu18+caffe+cuda
昨天安装caffe,因为用的是cuda10.2,遇到各种问题,最终也没有安装成功.使用cmake配置成功.生成成功.编译的时候报错. /usr/local/cuda/include/cuda_runt ...
- 持续集成与自动化部署---代码流水线管理及Jenkins和gitlab集成
1.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkins构建完成后,开发构建项目需要一项一项点击,比较麻烦.所以出现pipeline名词. 代 ...
- JS高级---函数中的this的指向,函数的不同调用方式
函数中的this的指向 普通函数中的this是谁?-----window 对象.方法中的this是谁?----当前的实例对象 定时器方法中的this是谁?----window 构造函数中的this是谁 ...
- python3爬取百度知道的问答并存入数据库(MySQL)
一.链接分析: 以"Linux"为搜索的关键字为例: 首页的链接为:https://zhidao.baidu.com/search?lm=0&rn=10&pn=0& ...