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