Django:ORM关系字段
一,ForeignKey外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。 ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。 1,字段参数to设置要关联的表 to_field设置要关联的表的字段 related_name反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。 例如: class Classes(models.Model):
name = models.CharField(max_length=32)
class Student(models.Model): 当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写: models.Classes.objects.first().student_set.all()
当我们在ForeignKey字段中添加了参数?related_name?后, class Student(models.Model):
name = models.CharField(max_length=32)
theclass = models.ForeignKey(to="Classes",related_name="students")
当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写: models.Classes.objects.first().students.all()
related_query_name反向查询操作时,使用的连接前缀,用于替换表名。 on_delete当删除关联表中的数据时,当前表与其关联的行的行为。 models.CASCADE删除关联数据,与之关联也删除 models.DO_NOTHING删除关联数据,引发错误IntegrityError models.PROTECT删除关联数据,引发错误ProtectedError models.SET_NULL删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空) models.SET_DEFAULT删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值) models.SET 删除关联数据,a. 与之关联的值设置为指定值,设置:models.SET(值)b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象) def func(): return 10 <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码"> <img src="https://www.52php.cn/res/2019/02-25/18/51e409b11aa51c150090697429a953ed.gif" alt="复制代码"> db_constraint是否在数据库中创建外键约束,默认为True。 二,OneToOneField一对一字段。 通常一对一字段用来扩展已有字段。 1,字段参数to设置要关联的表。 to_field设置要关联的字段。 on_delete同ForeignKey字段。 三,ManyToManyField用于表示多对多的关联关系。在数据库中通过第三张表来建立关联关系。 1,字段参数to设置要关联的表 related_name同ForeignKey字段。 related_query_name同ForeignKey字段。 symmetrical仅用于多对多自关联时,指定内部是否创建反向操作的字段。默认为True。 举个例子: class Person(models.Model):
name = models.CharField(max_length=16)
friends = models.ManyToManyField("self")
此时,person对象就没有person_set属性。 class Person(models.Model):
name = models.CharField(max_length=16)
friends = models.ManyToManyField("self",symmetrical=False)
此时,person对象现在就可以使用person_set属性进行反向查询。 through在使用ManyToManyField字段时,Django将自动生成一张表来管理多对多的关联关系。 但我们也可以手动创建第三张表来管理多对多关系,此时就需要通过through来指定第三张表的表名。 through_fields设置关联的字段。 db_table默认创建第三张表时,数据库中表的名称。 2,元信息ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。主要字段如下: db_tableORM在数据库中的表名默认是?app_类名,可以通过可以重写表名。 index_together联合索引。 unique_together联合唯一索引。 ordering指定默认按什么字段排序。 只有设置了该属性,我们查询到的结果才可以被reverse()。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |