首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Django中使用"Self“关键字和一对多关系调用属性

在Django中,"self"关键字用于表示模型中的自引用关系。自引用关系指的是模型与自身存在一对多的关系,即一个模型实例可以与其他模型实例建立关联。

使用"self"关键字可以在模型中定义自引用关系的属性。通过在字段定义中使用"self"关键字,可以创建一个指向同一模型的外键关系。这样,模型实例就可以通过该属性访问与其相关联的其他模型实例。

以下是一个示例:

代码语言:txt
复制
from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=100)
    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)

    def __str__(self):
        return self.name

在上述示例中,Person模型具有一个名为"parent"的外键字段,它指向自身。这意味着一个Person实例可以有一个父级Person实例。

使用自引用关系可以实现许多场景,例如组织结构、评论回复、社交网络中的关注关系等。

推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云云服务器CVM。

腾讯云数据库MySQL:https://cloud.tencent.com/product/cdb

腾讯云云服务器CVM:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django模型model

定义模型类 模型定义属性,会生成数据库表的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 管理站点最低限度的验证 django...定义模型属性 定义属性时,需要字段类型 字段类型被定义django.db.models.fields目录下,为了方便使用,被导入到django.db.models 使用方式 导入from django.db...模型类之间关系 关系的类型包括 ForeignKey:一对,将字段定义的端 ManyToManyField:,将字段定义两端 OneToOneField:一对一,将字段定义在任意一端...):tests = TestInfoManager() 当创建对象时,django不会对数据库进行读写操作 管理器的方法,可以通过self.model来得到它所属的模型类 调用save()方法才与数据库交互...实例方法 str (self):重写object方法,此方法将对象转换成字符串时会被调用 delete():将模型对象从数据表删除 11.

13410

Django—模型

对象关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存的对象之间存在关联继承关系,而在数据库关系数据无法直接表达对多关联继承关系。...关系字段类型 关系型数据库的关系包括三种类型: ForeignKey:一对,将字段定义的一端。...可以维护递归的关联关系使用'self'指定,详见"自关联"。 一对关系 参见booktest应用的BookInfo类HeroInfo类。...,所以属性定义英雄模型类  对多关系 我们下面设计一个新闻类新闻类型类,一个新闻类型下可以用很多条新闻,一条新闻也可能归属于多种新闻类型。...说明:关系属性使用self指向本类,要求nullblank允许为空,因为一级数据是没有父级的。

6.1K21
  • django 1.8 官方文档翻译: 2-2-1 执行查询

    但对于跨一对对多关系查询来说,第二种情况下,筛选条件针对的是主 model 所有的关联对象,而不是被前面的 filter() 过滤后的关联对象。 这听起来会让人迷糊,举个例子会讲得更清楚。...上述原则同样适用于 exclude():一个单独 exclude() 的所有筛选条件都是作用于同一个实例 (如果这些条件都是针对同一个一对关系)。...查询函式的所有参数(Q 关系关键字参数) 都是 “AND” 关系。但是,如果参数中有 Q 对象,它必须排在所有的关键字参数之前。...对多关系 对多关系的任何一方都可以使用 API 访问相关联的另一方。的 API 用起来上面提到的 “逆向” 一对关系关系非常相象。...一对关系 相对于对一关系而言,一对关系不是非常简单的。如果你 model 定义了一个 OneToOneField 关系,那么你就可以用这个字段的名称做为属性来访问其所关联的对象。

    4.4K20

    Django之ORM数据库

    作者详细模型:把作者的详情放到详情表,包含性别,email地址出生日期,作者详情模型作者模型之间是一对一的关系(one-to-one)(类似于每个人和他的身份证之间的关系),大多数情况下我们没有必要将他们拆分成两张表...书籍模型:书籍有书名出版日期,一本书可能会有多个作者,一个作者也可以写本书,所以作者和书籍的关系就是的关联关系(many-to-many),一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系...  每个模型相当于单个数据库表(对多关系例外,会生成一张关系表),每个属性也是这个表的字段。...一对一:实质就是主外键(author_id就是foreign key)的关系基础上,给外键加了一个UNIQUE=True的属性;              一对:就是主外键关系;(foreign key...(如何处理外键关系的字段如一对的publisher的authors) #一对(ForeignKey): #方式一: 由于绑定一对的字段,比如publish,存到数据库的字段名叫

    2.6K10

    Django 模型层之多表操作

    一.创建模型 实例: 作者表: 拥有字段:姓名(name),性别(sex),该表与书籍表之间为关系 作者详情表: 拥有字段:地址(addr),手机号(phone),该表与作者表之间为一对一的关系...,所有作者与书籍之间为的关联关系(Many-To-Many);一本书只有一个出版社,但是一个出版社可以出版多种书籍,所以出版社和书籍之间是一对的关联关系(One-To-Many);作者与作者详情就是一对一关联关系...models.CharField(max_length=255) price = models.DecimalField(max_digits=5, decimal_places=2) # 外键,关联关系写在一对的那一方...): return self.name 注意事项: 1.id字段不写的话会自动添加 2.对于外键字段,Django会在字段名上添加"_id"来创建数据库的列名 3.外键字段ForeignKey...Q对象关键字参数,所有提供给查询函数的参数都将"AND"在一起,但是,如果出现Q对象,它必须位于所有关键字参数的前面。

    1.3K20

    Django篇(二)

    常见模型字段属性 模型属性命名: 1、不能是python保留关键字 2、不允许出现联系的下划线 字段类型 第一篇文章我们仅仅了解了几个。 接下来我们重新了解一下有什么其他模型。...查询函数 我们Django通过:模型类.objects属性调用以下函数来进行查询 get: 返回表满足条件的一条数据,有且只能有一条,查询出多条会报异常。 查询不到数据也会报异常。...2、 一个老师对应多个学生,一个学生对应多个老师 那么老师表学生表就是关系。 我们需要使用ManyToManyField(),那么你会说我定义在那个表里了?定义那个表都行。...3、一对关系 学生的学号学生的详细信息表就是一对一的关系。 可以用OneToOneField来定义,定义那个一个类都可以。...stuinfo.objects.filter(c_id__id = 1) 自关联 自关联是一种特殊的一对关系, 我们关键模型类的时候,需要使用ForgignKey('self'),表示关联自己。

    1.4K20

    Python Day16 Django

    更高级的用法,可以使用命名的正则表达式组来捕获URL 的值并以关键字 参数传递给视图。 Python 正则表达式,命名正则表达式组的语法是(?...Python 代码使用django.core.urlresolvers.reverse() 函数。...更高层的与处理Django 模型实例相关的代码使用get_absolute_url() 方法。...,使用如下语句创建关联字段 publish=Foreignkey(to="Publish",to_field="") ---- 作者与书籍之间是关系,这就需要创建关系表,这个关系表此处由ORM...,通过它与Author表产生关系,从而创建关系表app01_book_author ---- 注意了: Book里这个author只是这个类的属性最终生成的数据库表并没有这个字段,只是用于orm

    1.9K10

    Django之ORM

    Django具体的对应方式为: 类名对应数据库的表名 类名对应数据库的表名 类属性对应数据库里的字段 类实例对应数据库表里的一行数据 类实例对象的属性对应这行的字段的值 一.数据库的连接 Django...一对一的创建即在外键创建好后给school_id添加UNIQUE=True的属性 3. teacher=models.ManyToManyField(teacher) 这样Django会默认添加一张表为...')) 4.使用’__’进行的查找 一对 school_name为外键对象的字段 school为student表设置的外键字段 student1=student.objects.filter(id=...2).values('school__name') print(student1) 一对的查询方式一样 teacher为student表设置的外键字段 student1=student.objects.filter...1)) 相当于用Q将条件封装,Q对象之间使用&或者|或者~ 如果想将普通发关键字参数查询与Q查询一起使用,必须将关键字参数查询放到Q的后边 9.扩展查询extra Django 的查询语法难以简练地表达复杂的

    1.1K30

    重写django的model下的objects模型管理器方式

    django自定义管理器model的继承 我写代码时建立的很多数据库需要一些共同的字段,比如is_active, create_time这些字段,所以可以建立一个基类model 模型的继承 我们可以充分利用..., *args, **kwargs): """ 我们可以看到 QuerySet里的filter方法exclude方法都是调用了这个方法, 这个方法的内部实现可 以自己看一看,就是用的...Model的字段属性选项 字段类型: autoField:一个根据实际ID自动增长的IntegerField,通常不指定,如果不指定,一个主键字段将自动添加到模型 CharField(max_length...:继承了FileField的所有属性方法,但对上传的对象进行校验,确保它是一个有效的image 字段选项 概述:通过字段选项,可以实现对字段的约束, 字段对象通过关键字参数指定 null:如果为True...不用重新生成迁移文件) 关系类型 分类: ForeignKey:一对,将字段定义的端 ManyToManyField:,将字段定义两端 OneToOneField:一对一,将字段定义在任意一端

    1.5K40

    ORM初识和数据库操作

    DAL写了很多的方法来读取对象数据,改变 状态对象等等任务。而这些代码写起来总是重复的。 ORM解决的主要问题是对象关系的映射。域模型关系模型分别是建立概念模型的基础上的。...域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类一个表对应,类的 每个实例对应表的一条记录,类的每个属性对应表的每个字段。...从效果上说,它其实是创建了一个可在编程语言里使用的——“虚拟对象数据库” ORM的作用 ORM它的作用是关系型数据库业务实体对象之间作一个映射,这样,我们具体的操作业务对象的时候,就不需要再去复杂的...ORM的优劣势 ORM的优势 ORM解决的主要问题是对象关系的映射。它通常把一个类一个表一一对应,类的每个实例对应表的一条记录,类的每个属性对应表的每个字段。...#建立的关系 def __str__(self): #__str__方法使用来吧对象转换成字符串的,你返回啥内容就打印啥 return self.title class

    2.5K30

    django 1.8 官方文档翻译:2-1-1 模型语法

    Django 提供了三种最常见的数据库关系对一(many-to-one),(many-to-many),一对一(one-to-one)。...对一关系  Django 使用 django.db.models.ForeignKey 定义对一关系使用其它字段类型一样:模型当中把它做为一个类属性包含进来。...示例代码,请见多对一关系模型示例)。 对多关系 ManyToManyField 用来定义对多关系,用法其他Field 字段类型一样:模型做为一个类属性包含进来。...一对关系 OneToOneField用来定义一对关系。 用法其他字段类型一样:模型里面做为类属性包含进来。 当某个对象想扩展自另一个对象时,最常用的方式就是在这个对象的主键上添加一对关系。...使用 ForeignKey一样,你可以定义_ 递归的关联关系引用尚未定义关系的模型。详见模型字段参考_。 另见 一对关系的模型例子 中有一套完整的例子。

    5K20

    django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)

    关系 显然,关系数据库的威力体现在表之间的相互关联。Django 提供了三种最常见的数据库关系对一(many-to-one),(many-to-many),一对一(one-to-one)。...对一关系 Django 使用 ForeignKey 定义对一关系使用其他 字段(Field) 类型一样: model 当中把它做为一个类属性包含进来。...对多关系 ManyToManyField 用来定义对多关系,用法其他 Field 字段类型一样: model 做为一个类属性包含进来。...对多关系的其他字段 处理类似搭配 pizza topping 这样简单的对多关系时,使用标准的 ManyToManyField 就可以了。...用法其他 Field 字段类型一样: model 里面做为类属性包含进来。 当某个对象想扩展自另一个对象时,最常用的方式就是在这个对象的主键上添加一对关系

    3.1K30

    Django MVT之M

    Django MVC概述开发流程已经讲解了Django的MVT开发流程,本文重点对MVT的模型(Model)进行重点讲解。 配置MySQL数据库 确保已经安装了操作mysql的包。...字段类型 Django每个模型类都会被映射为数据表,而模型类属性则被映射为数据表的字段。...QuerySet对象调用count方法,返回值是一个整数 # 查询所有学生的数量 StudentInfo.objects.all().count() 关联查询 一对关系 # 学校类-学生类 # 定义的类...(学生类) school = models.ForeignKey() 一对关系一对应的类简称一类,对应的类简称做类,定义的建立关联的类属性叫做关联属性。...(关联属性__一类属性名__条件名) 对多关系 # 体育新闻类-国际新闻类 # 定义在哪个类中都可以 models.ManyToManyField() 一对关系 # 员工基本信息类-员工详细信息类

    1K10

    Django之路由层

    一、Django实现表与表的关联 以图书管理系统为例我们在数据库建立四张表:图书表、出版社表、作者表、作者信息,这里表与标的对应关系如下: 表 表 对应关系 出版社 图书 一对 作者 图书 作者信息...作者 一对Django创建表与表的外间关系具体程序如下: class Book(models.Model): title = models.CharField(max_length=...对多关系django orm会自动帮我们创建书籍作者的第三张关系表 #外键的建立 publish = models.ForeignKey(to='Publish') author = models.ManyToManyField...regex='\d{2}' # 属性名必须为regex def to_python(self, value): return int(value) def to_url(self, value):...return value # 匹配的regex是两个数字,返回的结果也必须是两个数字 urls.py使用 register_converter 将其注册到URL配置: from django.urls

    1.3K21

    Django项目知识点(三)

    模型关系 基本原则: 一对一的表,两表的属性实际上完全可以合并成一个表,共用一个主键即可; 一对的表,可以设中间关联表,也可以将关联表并入“”这头;若设独立关联表,则可引入“”这头的主键作为其主键...SET():此值设置,会调用外面的值,可以是一个函数。 一对一:一个学生只有一个学号 一对:一个学生有多个课程 :多个学生有多个课程 ?...一对:当一张表创建一行数据时,有一个单选的下拉框(可以被重复选择) 一个学院信息表有多个学生的信息表 再比如文章和作者之间的关系。一个文章只能由一个作者编写,但是一个作者可以写篇文章。...文章和作者之间的关系就是典型的对一的关系。作者和文章的关系就是一对某表创建一行数据是,有一个可以多选的下拉框 不同的学生有不同课程表 再比如文章和标签的关系。...一对一:某表创建一行数据时,有一个单选的下拉框(下拉框的内容被用过一次就消失了) 一个学生信息表就只用一个对应的详细信息表 再比如一个用户表一个用户信息表。

    1.8K30

    Django】 开发:数据库操作和后台管理

    django的游标cursor对数据库进行 增删改查 操作 Django 跨过模型类直接操作数据库 使用步骤: 导入 cursor 所在的包 Django 的游标 cursor 定义...提供了比较完善的后台管理数据库的接口,可供开发过程调用测试使用 django 会搜集所有已注册的模型类,为这些模型类提拱数据管理界面,供开发者使用 使用步骤: 建后台管理帐号: 后台管理–创建管理员帐号...: 一对一映射 如: 一个身份证对应一个人 一对映射 如: 一个班级可以有多个学生 映射 如: 一个学生可以报多个课程,一个课程可以有多个学生学习 一对一映射 一对一是表示现实事物间存在的一对一的对应关系...一对多是表示现实事物间存在的一对的对应关系。...对多表达对象之间复杂关系,如: 每个人都有不同的学校(小学,初中,高中,…),每个学校都有不同的学生… 1.语法 关联的两个类的任意一个类,增加: 属性 = models.ManyToManyField

    4K40

    Django 定义模型2.1

    定义模型 模型定义属性,会生成表的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 管理站点最低限度的验证 django...会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列 属性命名限制 不能是python的保留关键字 由于django的查询方式...,不允许使用连续的下划线 定义属性 定义属性时,需要字段类型 字段类型被定义django.db.models.fields目录下,为了方便使用,被导入到django.db.models 使用方式...关系 关系的类型包括 ForeignKey:一对,将字段定义的端 ManyToManyField:,将字段定义两端 OneToOneField:一对一,将字段定义在任意一端...可以维护递归的关联关系使用'self'指定,详见“自关联” 用一访问:对象.模型类小写_set bookinfo.heroinfo_set 用一访问一:对象.模型类小写 heroinfo.bookinfo

    1.2K30
    领券