zoukankan      html  css  js  c++  java
  • Python之关系字段

    参考: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时,??
  • 相关阅读:
    C#(99):Queue<T>队列与Stack<T>堆栈
    C#(99):字典Dictionary<Tkey.TValue>与SortedList
    C#(99):列表:List<T>与HashSet和只读集合
    C#(99):C#数组Array
    C#(99):枚举类型与位域枚举Enum
    C#(99):结构类型:Struct
    C#(99):定义类成员(属性、方法、索引、运算符、事件)、接口实现
    C#(99):定义类、System.Object对象、构造函数与析构函数、抽象类与静态类
    SuperSocket.ClientEngine介绍
    C#(99):五、并行编程
  • 原文地址:https://www.cnblogs.com/wangyue0925/p/8990241.html
Copyright © 2011-2022 走看看