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

Django模型与同一个表中的2个外键

Django模型与同一个表中的2个外键

在Django模型中,可以定义多个外键关联到同一个表。这种情况下,需要使用models.ForeignKey来定义外键字段,并指定to参数来指定关联的表。

例如,假设有一个User模型和一个Post模型,Post模型中有两个外键字段authoreditor,它们都关联到User模型。可以这样定义Post模型:

代码语言:python
代码运行次数:0
复制
from django.db import models
from .models import User

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts_authored')
    editor = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts_edited')

在上面的例子中,authoreditor字段都是外键,它们关联到User模型。on_delete参数指定了当关联的User对象被删除时,Post对象的行为。related_name参数则指定了反向关联的名称,即User模型中可以通过posts_authoredposts_edited来获取与该用户相关的所有Post对象。

需要注意的是,在定义多个外键关联到同一个表时,需要为每个外键字段指定不同的related_name参数,以避免命名冲突。

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

相关·内容

django模型中有关系删除相关设置

0904自我总结 django模型中有关系删除相关设置 一.一对一 例如有Author、AuthorDetail两 author = models.OneToOneField(to='Author...:作者删除详情删除,详情删除作者保留 2)作者找详情用 related_name(detail),详情找作者用 字段(author) 3)db_constraint断开关联,on_delete...(多一方):出版社删除书不动,书删除没有任何影响 2)出版社找书用 related_name(books),书找出版社 字段(publish) 3)db_constraint断开关联...,关联相关内容不会删除 models.CASCAD关联内容删了,关联相关内容会删除 db_constraint关系断开后,但是不影响联查询 四.多对多关系 例如Book、Author两 authors...2)正向找 字段,反向找 字段related_name 3)db_constraint断开关联,on_delete不存在(不设置,本质在第三张设置,且一定是级联)

3K20

Django学习-第七讲:django 常用字段、字段属性,关系、操作

关系 在MySQL有两种引擎,一种是InnoDB,另外一种是myisam。如果使用是InnoDB引擎,是支持约束存在使得ORM框架在处理关系时候异常强大。...因此这里我们首先来介绍下Django使用。 类定义为class ForeignKey(to,on_delete,**options)。...因此在底层,Django为Article添加了一个属性名_id字段(比如author字段名称是author_id),这个字段是一个,记录着对应作者主键。...以上例为例,如果User和Article不是在同一个app # User模型在user这个app class User(models.Model): username = models.CharField...如果一个模型使用了

3.9K30

Django——ContentType(多个建立关系)及ContentType-signals使用

一、ContentType  在django,有一个记录了项目中所有model元数据,就是ContentType,中一条记录对应着一个存在model,所以可以通过一个ContentType...例如,我们在自己app创建了如下几个model:post,event。迁移之后,我们来查看一下ContentType這个数据中生成数据:   如上图,生成了appmodel对应关系。...怎么从这张操作记录得到相应操作model呢,这就得用到fields.GenericForeignKey,它是一个特殊,可以指向任何Model实例,在这里就可以通过这个字段来指向类似Post...是再给上面的增加一个,然后重新修改数据库么?显然是不能,一旦数据库被创建了,我们几乎很少再去修改数据,如果再给其添加额外字段,无疑会带来不必要麻烦。...总之,如果一个与其他有多个关系,我们可以通过ContentType来解决这种关联。

4.3K20

django在开发取消约束实现

# 在setting设置 'OPTIONS': { "init_command": "SET foreign_key_checks = 0;", } 补充知识:django-给关系传值...,删除外关系 反查: 在关系里 related_name = ‘反查name’,自己不设置,django也会默认设置为class小写名字+_set , ex: book_set....''' 两种方法 教室ClassRoom和教室编号ClassNumber 字段在django类里名(room_number)在数据库名(room_number_id) '''      # 一.1...(数据库字段名字room_number_id)值,将相对应值直接赋值给该字段      class_number = ClassNumber.object.get("id=1").room_number...s.teacher.remove(x) return HttpResponse("ojbk") 以上这篇django实现在开发取消约束就是小编分享给大家全部内容了,希望能给大家一个参考。

3.6K10

Django创建、字段属性简介、脏数据概念、子序列化

Django设置 通过图书管理系统引入多表操作:如果我们创建方式是先抽象出之间相同字段建一个父类,然后在用每个类去继承这个父类,如下面的代码,我们将无法得到期望表字段。...db_table = 'xxx'指定该类数据库表单名字。当然如果不指定也没关系,Django会自动默认按照一定规则生成数据模型对应数据库名。...假设图书管理系统书、出版社、作者、作者详细信息四张之间关系如下: """ 关系 1)Book 和 Publish 一对多:在多一方 Book 2)Book 和 Author 多对多:在查询频率高一方...更合理) """ Django orm中外字段属性详解 在建之前我们对外字段属性进行了解: 1)related_name在外设置反向查询字段名:正向找字段名,反向找related_name...子序列化 Django子序列化功能是:通过跨查询数据然后对跨查到数据反序列化。

4.3K30

Django 2.2文档系列】Model on_delete参数用法

场景 我们用DjangoModel时,有时候需要关联。关联时,参数:on_delete几个配置选项到底是干嘛呢,你知道吗? 参数介绍 models.CASCADE 级联删除。...Django会模拟SQL约束行为,在删除此条数据时,同事删除外关联对象。...比如:用户有一个关联是用户健康记录,当用户删除时,配置了这个参数健康记录中跟这个用户有关数据也会被删除。...” models.PROTECT 防止删除引用对象。上个恰恰相反,是防止关联数据被删除。 models.SET_NULL 设置关联内容为null。只有设置了null=True时可用。...当数据被删除时,被关联内容被设置为null。 models.SET_DEFAULT 将值设置为默认值。必须设置有默认值 。

1.9K10

Django-Multitenant,分布式多租户数据库项目实战(PythonDjango+Postgres+Citus)

目录 项目源码 安装 支持 Django 版本/前提条件。 用法 模型变化 使用 mixins 更改模型 在 db 层自动化复合: 在哪里设置租户?...构建多租户数据库架构包括:为每个租户创建一个数据库、为每个租户创建一个 schema 和让所有租户共享同一个。...这个库基于第三种设计,即让所有租户共享同一个,它假设所有租户相关模型/都有一个 tenant_id 列来表示租户。...: 使用 mixins 更改模型 在您要使用库任何文件,只需: 所有模型都应使用 TenantModelMixin 和 django models.Model 或您客户模型类 Ex: class...如果要确保在 db 层创建复合(带有 tenant_id),则应将 settings.py 数据库 ENGINE 更改为 django_multitenant.backends.postgresql

1.9K10

010:Django高级模型

本章知识点 1、Django模型关系字段介绍使用 2、Django模型关系字段查询 知识点讲解 1、Django模型关系字段介绍使用 业务主体间关系 学生 和 专业 关系 一个学生对应一个专业...一个专业对应多个学生 一对多关系 Foreignkey 查询这个学生对应专业 查询这个专业所有学生 学生 和 老师关系 一个学生对应多个老师 一个老师对应多个学生 多对多关系...ManyToManyField 一个老师教过所有学员 一个学员所有的老师 专业 一 学生 多 字段 对应 专业主键 我们研究这两种关系,从以下两个角度 1、...模型关系字段查询 1、 查询学生对应项目 这样查询时候最简单,学生当中外字段对应就是完整信息,可以直接获取 项目对应所有学生 视图部分 前端部分...2、多对多数据 老师和学生 老师对应所有学生 学生对应所有老师 本章总结 Django模型关系字段介绍使用 Django模型关系字段查询

51520

【Python全栈100天学习笔记】Day41 Django深入理解框架

字段属性primary_key用于设置主键,max_length用来设置字段最大长度,db_column用来设置数据库字段对应列,verbose_name则设置了Django后台管理系统该字段显示名称...Dept.objects.get(pk=10).emp_set.all() # 通过部门反查部门所有的员工 , , ]> 说明1:由于员工部门之间存在多对一关联...db_constraint:是否为创建约束,默认值为True。...on_delete:关联对象被删除时对应动作,可取值包括django.db.models定义: CASCADE:级联删除。...through:指定维持多对多关系中间Django模型。 throughfields:定义了中间模型时可以指定建立多对多关系字段。 db_table:指定维持多对多关系中间名。

2.2K30

Django基础篇-模型关系

一对多表关系 在 Mysql 中一对多是通过实现,在 django 模型通过 ForeignKeyField 类型实现。...框架篇-Django博客应用-更新首页 一对一关系 在 Mysql 中一对一是通过加唯一实现,在 django 模型通过 OneToOneField 类型实现。...多对多表关系 在 Mysql 多对多是通过中间加联合唯一实现,在 django 模型通过 ManyToManyField 类型实现。中间模型会自动创建。...例子: 学院---学生---课程---学生成绩 学院学生一对一关系,学生课程多对多关系 课程 学生成绩 关系数据操作 : 同级目录下 views.py from django.http import...s1.save() # 多对多关系添加内容 # 新增 python 课程 c1 = Course(c_name='python') # 将 python 课程给学生第一位学生

85030

Django ORM 多表操作

目录 Django ORM 多表操作 模型 关系 创建模型 逆向到模型 插入数据 ORM 添加数据(添加) 一对多( ForeignKey) 一对一 (OneToOneFeild) 多对多...ORM 多表操作 模型 图书 出版社 作者 作者详情 关系 一对一:一对一推荐建在查询频率高一方 一对多:字段建在多一方 多对多:字段建在查询频率多一方,在Django第三张不需要创建...,自动创建 ps:字段不需要写名_id后面的_id,ORM创建时候自动添加了_id,以及以虚拟字段形式存在 创建模型 '''models.py''' from django.db import...6、若有模型类存在外,创建数据时,要先创建关联模型数据,不然创建包含模型数据时,关联模型数据会找不到 逆向到模型 插入数据 ps:插入几条数据方便操作 ORM...(常用) 一对多,设置属性类(多),MySQL 显示字段名是:属性名_id。

1.7K20

Django框架学习(四)

order_by 1.7关联查询 1、查询和指定对象关联数据(重点掌握) 由一查多:一对象.多类名小写__set.all() 由多查一:多对象.属性 2、通过模型类进行关联查询 查图书:一类.objects.get...|filter(多类名__字段__条件=值) 查英雄:多类.objects.filter(属性__字段__条件=值) 2.查询集 注意:对于queryset类对象,可以继续调用之前任何一个查询函数...定义模型admin管理类,继承于admin.ModelAdmin 2)admin.site.register(模型类,admin管理类) 3)在Admin管理类通过对应类属性控制admin界面内容...使用: 1、在配置文件设置配置项MEDIA_ROOT=‘上传文件保存目录’ 2、定义模型类时,图片字段类型使用’imageField’ 3、迁移生成,并在admin.py注册模型类,直接登录admin...团队开发注意事项 浅谈密码加密 Django框架英文单词 Django数据库相关操作

1.5K41

用人话讲解django之数据增删改

在 web 开发,最重要是数据库设计,就是 models 模型设计,简单web开发说白了就是对数据库增删改查,今天先看下数据库增加,修改,和删除吧,我们操作数据库可以使用原生sql语句,但是如果...sql操作语句不复杂,可以使用django ORM 语句,它是通过一些封装,根据 ORM 语法可以对数据库增删改查,用一同一个 ORM 语句可以支持对 mysql、sqlite、PostgreSQL...我现在model模型是有两个,一个学生,一个班级,代码如下: class Student(models.Model): # 一定要继承 # CharField为字符串类型,必须有max_length...,比如一个班级有多个学生,就属于一对多,要放到"多"那张, # related_name是对外取别名,常用在djangoorm反向查询 cls = models.ForeignKey...name="1903") # stu_info左边key要和Student模型字段对应上,因为cls是,所以要对应一个班级实例 stu_info = { "name

39130

Django之ForeignKey和ManyToManyField多表查询

只有在db_constraint=True时Django model才会在数据库上建立约束, 在该值为False时不建立约束. 默认db_constraint=True....ForeignKey.related_query_name以ForeignKey.related_name作为默认值 使用ForeignKey查询 前向查询 若关系模型A包含模型B关联关联字段, 模型...如Entry.blog作为Blog,默认情况下Blog.entry_set是包含所有参照BlogEntry示例查询集,可以使用查询集API取出相应实例。...ManyToManyField 字段模型键名称(本例为group),field2 为指向目标模型名称(本例为person)....添加删除关联 因为ManyToManyField自动维护关联,程序员不便于直接访问.ManyToManyField提供了API用于添加和删除关联(即through记录).

1.7K10

Django 模型层之多表操作

一.创建模型 实例: 作者: 拥有字段:姓名(name),性别(sex),该书籍之间为多对多关系 作者详情: 拥有字段:地址(addr),手机号(phone),该作者之间为一对一关系...models.CharField(max_length=255) price = models.DecimalField(max_digits=5, decimal_places=2) # ...Author) def __str__(self): return self.name 注意事项: 1.id字段不写的话会自动添加 2.对于字段,Django会在字段名上添加..."_id"来创建数据库列名 3.字段ForeignKey有一个null=True设置,你可以赋给它空值None 二.添加表记录 一对一: # 方式一: detail_obj = models.AuthorDetail.objects.filter...查询 F查询 现在位置操作种,都是将模型字段常量进行比较,但是,如果想将模型一个字段同一个模型另一个字段进行比较该怎么办?

1.3K20

django 1.8 官方文档翻译: 2-5-6 多数据库

这个方法还可以用来决定一个给定数据库上某个模型可用性。 注意,如果这个方法返回False,迁移将默默地不会在模型上做任何操作。这可能导致你应用某些操作之后出现损坏多余或者缺失。...然而,如果你正在使用SQLite 或MySQLMyISAM ,则没有强制性引用完整性;结果是你可以‘伪造’跨数据库。但是Django 官方不支持这种配置。...admin依赖auth,所以它们模型必须auth在同一个数据库。 flatpages和redirects依赖sites,所以它们必须sites在同一个数据库。...另外,一些对象在migrate在数据库创建一张后自动创建: 一个默认Site, 为每个模型创建一个ContentType(包括没有存储在同一个数据库模型), 为每个模型创建3个Permission...(包括不是存储在同一个数据库模型)。

1.5K20
领券