参考:https://blog.csdn.net/pugongying1988/article/details/72870264

关系字段:一对一,多对一,多对多

 一对一:  现在有很多一对一辅导班,也就是上课时,一个老师对应一个学生,一个学生对应一个老师

  多对一:  很多偏远山区的学校可能整个学校只有一个老师,这一个老师对应多个学生,所有的学生对应这一个老师

  多对多:  而我们则很幸福,学校里有许多老师,一个老师教习一科,学生有多个老师,老师有多个学生。

除了上面的Fields,还有关系Field:

  1. ForeignKey,对应的是一对多的关系,可以指定关联删除-**on_delete=models.CASCADE**,如果要关联的对象还没有定义好,可以使用其名字。
    1. limit_choices_to,可以限制关联返回的内容。
    2. related_name,可以让关联的对象反查到源对象,如果不想创建反向关联,则设置为"+"即可。需要注意的是,如果没有使用该Field,那么想要使用反向关联,则需要**foo_set**,foo为关联对象的小写名称,如果使用了该Field,则可以直接使用自己定义的名称。
    3. related_query_name,和上面的作用类似,同样可以反向查询,两者只需要设置一个即可。
    4. to_field,指定关联对象的字段名称,默认情况下为对方的主键。
    5. db_constraint,控制是否在数据库中为这个外键创建约束,默认为True。
    6. on_delete,可以实现CASCADE,级联删除;PROTECT,防止被引用对象删除,抛出ProtectedError;SET_NULL,将其设置成null;

SET_DEFAULT,设置成默认值;SET,可以传递值,同时还可以传递可调用对象;DO_NOTHING,不采取任何动作。

  1. ManyToManyField,对应的是多对多的关系。
    1. symmetrical,只用在自己对自己进行关联的时候。比如说Friend,你的朋友是我,我的朋友是你。
    2. through,如果不想要Django自动创建的多对多的关系表,可以通过指定through指定自己定义的中介表。
    3. through_fields,在上面的基础上指定中间模型的**哪些字段**来建立是多对多关联。
    4. db_table,设定多对多关系表的名称。
    5. db_constraint,同上。
    6. swappable,
  2. OneToOneField,对应的是一对一的关系,其可以直接返回关系另一边的对象,最主要的用途是作为扩展自另外一个模型的主键。比如多表继承就是利用这样的原理,通过对子模型添加一个隐式的一对一关联关系到父亲模型实现的。

    如果你没有指定其的related_name参数,那么Django将使用当前模型的小写名称作为默认值。
    如果访问相应的对象不存在的话,则会抛出ObjectDoesNotExist的异常。
    当设置**parent_link**为True时,??

 

posted on 2018-05-04 13:40  wy0925  阅读(118)  评论(0编辑  收藏  举报