django的外键,django models.ForeignKey

  django的外键,django models.ForeignKey

  本文主要介绍Django中ForeignKey的引入和使用,通过示例代码详细介绍,具有一定的参考价值。感兴趣的朋友可以参考一下。

  00-10101,on_delete2,related_name3,related_query_name4,保存外键字段。本说明介绍了Django系统模型的外键处理,外键以及相应的处理方法。

  这是一对多字段类型,表示两个表之间的关系。

  这份说明的内容如下:

  on _ delete related _ name related _ query _ name保存外键字段

  

目录

 

  假设有两个应用程序,app1和app2。

  App1下的一个模型是app1。

  app2下的一个模型是App2。

  # app1/models.py

  App1级(型号。型号):

  app2=模型。ForeignKey(app2。App2 ,on _ delete=模型。级联)

  # app2/models.py

  App2类(型号。型号):

  及格

  我们在设置ForeignKey的时候,有一个on_delete参数,主要是在关联外键的数据被删除的时候,用来处理我们自己的数据。

  我们上面两个模型的例子是当App2中的某个数据被删除时,如何处理与该数据相关联的App1的数据。

  处理方法主要包括以下几种:

  串联

  删除,当App2的数据被删除时,与App1关联的数据也被删除。

  保护

  处理,如果App2的数据与App1关联,关联的App2的数据不会被删除。

  SET_NULL

  如果App2的数据被删除,则与App1中被删除的App2数据相关联的该字段将被设置为空。

  什么都不做

  不会,对原始数据不会有任何操作,也就是说删除了App2中的一条数据,而App1中的引用还在。

  实际上,不建议这样做,因为如果您在App1中访问这些数据并使用app2字段,将会报告一个错误。

  

1、on_delete

 

  ForeignKey有一个属性related_name,用于指示从相关对象到该对象的关系的名称。它仅用于显示,但如果未分配相关查询名称字段,相关查询名称将默认为相关名称值。

  注:related_name还有一个用途,就是在同一个类下。如果两个字段是另一个模型的外键字段,则需要添加related_name来区分这两个字段。

  例子如下:

  类别条目(型号。型号):

  blog_old=模特。外键(Blog,related_name=old_entry )

  blog_new=模特。ForeignKey(博客,相关名称=新条目)

  

2、related_name

 

  该字段主要用于搜索反向过滤器。如果未单独分配此字段,默认情况下将使用related_name的值。

  关于反向滤镜,可以看看这个功能。这里有两个模型:

  班级博客(模特。型号):

  及格

  类别条目(型号。型号):

  博客=模特。外键(博客)

  现在我们有了博客的数据,

  blog_1=Blog.objects.get(id=1)

  如果我们想得到所有条目表中blog的值为blog_1,应该怎么做?一般来说,是:

  entry _ list=entry . objects . filter(blog=blog _ 1)

  但是因为blog字段是一个外键,所以我们使用反向过滤器来处理它:

  entry _ list=blog _ 1 . entry _ set . all()

  以上是我们反向过滤的用法,即使用关联型号名称的小写 _ set 进行操作。这是一个固定的用法。

  但如果我们设置了related_query_name字段,就可以放弃模型名称小写 _set 的用法,直接使用related_query_name进行操作。例如,条目如下:

  类别条目(型号。型号):

  博客=模特。外键(Blog,related_name=entries )

  此时,我们还没有设置related_query_name的值,所以我们将自动使用related_name的值。使用反向过滤器的方法如下:

  entry_list=blog_1.entries.all()

  

3、related_query_name

 

  首先介绍一下数据库和模型中外键字段的出现。

  在模型中,以Entry为例,我们可以看到关键的blog字段被直接命名为‘blog’。

  但是在数据库的结构中,如果我们看一下,可以看到字段是blog_id。

  当我们得到一个Entry实例(entry_obj)时,

  entry _ obj=entry . objects . get(id=1)

  当我们输出entry_obj时。我们返回的是博客的一个实例,一个对象,

  并输出entry_obj.blog_id,返回的数据为int类型。

  那么,我们如何保存条目实例的blog字段,

  如果我们有一个blog实例blog_1,那么我们可以直接使用它:

  entry_obj.blog=blod_1

  entry_obj.save()

  如果我们有一个博客,其主键id是blog_id,那么我们可以这样做:

  entry_obj.blog_id=blod_id

  entry_obj.save()

  这篇关于Django的ForeignKey的介绍和使用的文章到此为止。有关Django foreign key的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: