Django中ORM外键与表的关系是什么

  

Django中ORM外键与表的关系是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>外键

在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是InnoDB引擎,是支持外键约束的。外键的存在使得ORM框架在处理表关系的时候异常的强大,因此这里我们首先来介绍下外键在Django中的使用。

类定义为类ForeignKey (on_delete, * *选项)。第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有级联,SET_NULL等。这里以一个实际案例来说明。比如有一个用户和一个文章两个模型。一个用户可以发表多篇文章,一个文章只能有一个作者,并且通过外键进行引用。那么相关的示例代码如下:

class 用户(models.Model):   时间=username 才能;models.CharField (max_length=20)   时间=password 才能;models.CharField (max_length=100)      class 文章(models.Model):   时间=title 才能;models.CharField (max_length=100)   时间=content 才能;models.TextField ()      author 才能=,models.ForeignKey (“User", on_delete=models.CASCADE)

以上使用ForeignKey来定义模型之间的关系。即在文章的实例中可以通过作者属性来操作对应的用户模型。这样使用起来非常的方便。示例代码如下:

article =,文章(标题=& # 39;abc # 39;,内容=& # 39;123 & # 39;)   时间=author 用户(用户名=& # 39;张三& # 39;,密码=& # 39;111111 & # 39;)   时间=article.author 作者   article.save ()      #,修改article.author上的值   时间=article.author.username  & # 39;李四& # 39;   article.save ()

为什么使用了ForeignKey后,就能通过作者访问到对应的用户对象呢。因此在底层,Django表为文章添加了一个属性名_id的字段(比如作者的字段名称是author_id),这个字段是一个外键,记录着对应的作者的主键。以后通过文章。作者访问的时候,实际上是先通过author_id找到对应的数据,然后再提取用户表中的这条数据,形成一个模型。

如果想要引用另外一个应用的模型,那么应该在传递到参数的时候,使用app.model_name进行指定。以上例为例,如果用户和文章不是在同一个应用程序中,那么在引用的时候的示例代码如下:

#,用户模型在用户这个应用程序中   class 用户(models.Model):   时间=username 才能;models.CharField (max_length=20)   时间=password 才能;models.CharField (max_length=100)      #,模条型在这条个应用程序中   class 文章(models.Model):   时间=title 才能;models.CharField (max_length=100)   时间=content 才能;models.TextField ()      author 才能=,models.ForeignKey (“user.User", on_delete=models.CASCADE)

如果模型的外键引用的是本身自己这个模型,那么,参数可以为& # 39;自我# 39;,或者是这个模型的名字。在论坛开发中,一般评论都可以进行二级评论,即可以针对另外一个评论进行评论,那么在定义模型的时候就需要使用外键来引用自身。示例代码如下:

class 评论(models.Model):   时间=content 才能;models.TextField ()   origin_comment 才能=,models.ForeignKey(& # 39;自我# 39;,on_delete=models.CASCADE null=True)   #才能,或者   #,才能origin_comment =, models.ForeignKey(& # 39;评论# 39;,on_delete=models.CASCADE null=True)

<强>外键删除操作:

如果一个模型使用了外键。那么在对方那个模型被删掉后,该进行什么样的操作。可以通过> <李>

级联:级联操作。如果外键对应的那条数据被删除了,那么这条数据也会被删除。

<李>

保护:受保护。即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据。

<李>

SET_NULL:设置为空。如果外键的那条数据被删除了,那么在本条数据上就将这个字段设置为空。如果设置这个选项,前提是要指定这个字段可以为空。

<李>

SET_DEFAULT:设置默认值。如果外键的那条数据被删除了,那么本条数据上就将这个字段设置为默认值。如果设置这个选项,前提是要指定这个字段一个默认值。

<李>

设置():如果外键的那条数据被删除了。那么将会获取一组函数中的值来作为这个外键的值,设置函数可以接收一个可以调用的对象(比如函数或者方法),如果是可以调用的对象,那么会将这个对象调用后的结果作为值返回回去。

Django中ORM外键与表的关系是什么