django models.ForeignKey,django 主键

django models.ForeignKey,django 主键,Django中外键ForeignKey介绍使用

本文主要介绍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的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

django models.ForeignKey,django 主键