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

posted @ 2020-01-14 15:51  HashFlag  阅读(214)  评论(0编辑  收藏  举报