zoukankan      html  css  js  c++  java
  • Model&Form&ModelForm拾遗

    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

  • 相关阅读:
    《C程序设计语言》练习1-10
    《C程序设计语言》练习 1-8,1-9
    被这个C程序折腾死了
    《C程序设计语言》练习 1-6,1-7
    利用圆解一元二次方程
    三角插值的 Fourier 系数推导
    利用离散 Fourier 变换解一元二次方程
    关于selenium IDE找不到元素
    【★】深入BGP原理和思想【第一部】
    【★】深入BGP原理和思想【第一部】
  • 原文地址:https://www.cnblogs.com/wylshkjj/p/12192421.html
Copyright © 2011-2022 走看看