Model&Form&ModelForm拾遗

一、Model&Form&ModelForm

  • Model:用于用户请求数据的验证(针对性弱),但有强大的数据库操作
  • Form:强大的数据验证(用于用户请求数据)
  • ModelForm:强大的数据验证,适中的数据库操作。用于数据库操作(只针对部分操作);用于用户请求的验证(只针对部分操作)

二、Model操作:

  1. 数据表操作(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

  2. 参数操作

    model具体详细请看转载链接(此链接为转载,详细了解请百度路飞学城):https://www.cnblogs.com/wupeiqi/articles/6216618.html

  3. 数据库可以使用同步功能,写读分离,写是一个数据库1,读是一个数据库2,然后把两个数据库同步,写入数据时在数据库1执行操作,读取数据时在数据库2进行操作。

三、Form操作:

  1. model具体详细请看转载链接(此链接为转载,详细了解请百度路飞学城):https://www.cnblogs.com/wupeiqi/articles/6144178.html

四、ModelForm操作:

  1. ModelForm具体详细请看转载链接(此链接为转载,详细了解请百度路飞学城):https://www.cnblogs.com/wupeiqi/articles/6229414.html

Model&Form&ModelForm拾遗的更多相关文章

  1. Django的model form组件

    前言 首先对于form组件通过全面的博客介绍,对于form我们应该知道了它的大致用法,这里我们需要明确的一点是,我们定义的form与model其实没有什么关系,只是在逻辑上定义form的时候字段名期的 ...

  2. model.form使用,配合form的钩子

    一次model.form的使用记录,配合form钩子的过程 在写信息采集功能的时候,需要添加资产信息,使用modelform组件减少工作量 官网介绍:版本1.9.https://docs.django ...

  3. Django Model Form

    ModelForm ModelForm结合了Form和Model,将models的field类型映射成forms的field类型,复用了Model和Model验证, 写更少的代码,并且还实现了存储数据 ...

  4. Django之路12——form modelform formset modelformset的各种用法

      首先上结论: form适用于对单个表单的操作,并且需要对每个字段的验证规则自定义. modelform:适用于对用户提交的单个表单操作,字段可以用model中的表的字段来作为验证规则,适用于快速的 ...

  5. python3-开发进阶Django-form组件中model form组件

    Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样 ...

  6. Django 的 model form 组件

    Django 的 model form 组件 Model Form 组件的由来 之前介绍过 Django 的 Form 组件(Django的Form表单)使用方法,Form 组件能够帮我们做三件事: ...

  7. 14 Django之Form和Model Form组件

    一.什么是Form 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用 ...

  8. form modelform formset modelformset的各种用法

    form modelform formset modelformset的各种用法   首先上结论: form适用于对单个表单的操作,并且需要对每个字段的验证规则自定义. modelform:适用于对用 ...

  9. model form

    ModelForm 能允许我们通过一个 Model 直接创建一个和该模型的字段一一对应的表单,大大方便了表单操作. 下面来看一个例子. 首先我们有这样的 model: from django.db i ...

随机推荐

  1. git配置多仓库

    git配置多仓库 github , gitee , coding , gitlab , gitlab.company ..... 真TM多 . 真TM多 . 真TM多 . 生成ssh 生成ssh 密钥 ...

  2. linux 配置compoer

    配置默认php 删除 rm -f /usr/bin/php 改到php7.3版本的composer /bin/php /usr/bin/php 多版本支持 配置php7专用composer70 cd ...

  3. js动画函数

    var tween = { linear: function (t, b, c, d) { return c * t / d + b; }, easeIn: function (t, b, c, d) ...

  4. 【巨杉数据库SequoiaDB】SequoiaDB 巨杉数据库 v3.4 版本正式发布

    深秋时节,SequoiaDB 巨杉数据库在深秋给大家带来了“一把火”.SequoiaDB v3.4 正式发布啦! 分布式交易场景性能大幅提升 SequoiaDB 巨杉数据库3.4版本正式发布,v3.4 ...

  5. 【巨杉数据库Sequoiadb】巨杉⼯具系列之一 | ⼤对象存储⼯具sdblobtool

    近期,巨杉数据库正式推出了完整的SequoiaDB 工具包,作为辅助工具,更好地帮助大家使用和运维管理分布式数据库.为此,巨杉技术社区还将持续推出工具系列文章,帮助大家了解巨杉数据库丰富的工具矩阵. ...

  6. MySQL的选则字段+联表+判断+排序(order by)

    MySQL的选则字段+联表+判断+排序(order by) 两个表:1.成绩单 2.查询名单 目标: 1.选中全部字段,用于输出. 2.成绩单中有很多人的成绩,第一步是希望通过联表,只查查询名单上的人 ...

  7. Keep、小红书、美图…独角兽App能拿到新一轮救命钱吗?

    大多数人热爱手机,不是因为时尚的外观或者结实的零部件,而是因琳琅满目的App赋予其太多的功能.智能手机最先是清理掉人类的零碎时间,现如今又开始肢解我们大块的时间,或者说,智能手机本身就是生活.在如此背 ...

  8. 二分-G - 4 Values whose Sum is 0

    G - 4 Values whose Sum is 0 The SUM problem can be formulated as follows: given four lists A, B, C, ...

  9. Web 开发人员推荐的通用独立 UI 组件

    现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...

  10. ModuleNotFoundError: No module named 'numpy.testing.nosetester'