本文主要介绍Django中ForeignKey的引入和使用,通过示例代码详细介绍,具有一定的参考价值。感兴趣的朋友可以参考一下。
目录
1、on_delete2、related_name3、related_query_name4、ForeignKey字段的保存本说明介绍Django系统模型的外键处理、外键以及相应的处理方法。
这是一对多字段类型,表示两个表之间的关系。
这份说明的内容如下:
on _ delete related _ name related _ query _ name保存外键字段
1、on_delete
假设有两个应用程序,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字段,将会报告一个错误。
2、related_name
ForeignKey有一个属性related_name,用于指示从相关对象到该对象的关系的名称。它仅用于显示,但如果未分配相关查询名称字段,相关查询名称将默认为相关名称值。
注:related_name还有一个用途,就是在同一个类下。如果两个字段是另一个模型的外键字段,则需要添加related_name来区分这两个字段。
例子如下:
类别条目(型号。型号):
blog_old=模特。外键(Blog,related_name=old_entry )
blog_new=模特。ForeignKey(博客,相关名称=新条目)
3、related_query_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()
4、外键字段的保存
首先介绍一下数据库和模型中外键字段的出现。
在模型中,以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的ForeignKey的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!