关系字段

ForeignKey

外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。

比如两张表:书和出版社,书只能有一个出版社,而出版社可以出版多本书,所以外键设置在书的一方,如果设置在出版社那就只能出版一本书了。

ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。

字段参数

to

设置要关联的表

to_field

 设置要关联的表的字段

related_name

 反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'

例如:

class Classes(models.Model):
    name = models.CharField(max_length=32)

class Student(models.Model):
    name = models.CharField(max_length=32)
    theclass = models.ForeignKey(to="Classes")
# 当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写:
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

 默认为True,当删除关联表中的数据时,当前表与其关联的行的行为

 

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

class MyModel(models.Model):
    user = models.ForeignKey(
        to="User",
        to_field="id",
        on_delete=models.SET(func)
    )

db_constraint

是否在数据库中创建外键约束,默认为True。

 

上一篇:转 Code First 数据注释--InverseProperty 和 ForeignKey


下一篇:AttributeError: 'SQLAlchemy' object has no attribute 'Foreignkey'