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

Django --有没有办法将外键连接到数据类型不是整型的主键?

在Django中,外键通常连接到整型的主键字段。然而,如果需要将外键连接到数据类型不是整型的主键,可以使用Django的ForeignKey字段的to_field参数。

to_field参数允许我们指定外键连接的目标模型的字段,而不仅仅是默认的整型主键字段。通过将to_field参数设置为目标模型中的非整型字段,我们可以将外键连接到该字段。

下面是一个示例,展示了如何在Django中将外键连接到数据类型不是整型的主键:

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

class MyModel(models.Model):
    my_non_integer_pk = models.CharField(max_length=20, primary_key=True)

class AnotherModel(models.Model):
    my_model = models.ForeignKey(MyModel, to_field='my_non_integer_pk', on_delete=models.CASCADE)

在上面的示例中,MyModel模型使用了一个名为my_non_integer_pkCharField作为主键。然后,AnotherModel模型使用ForeignKey字段将外键连接到MyModel模型的my_non_integer_pk字段。

这样,我们就成功地将外键连接到了数据类型不是整型的主键字段。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)。

  • 腾讯云云服务器(CVM):提供弹性、安全、高性能的云服务器实例,适用于各种应用场景。了解更多信息,请访问:腾讯云云服务器
  • 腾讯云数据库(TencentDB):提供高可用、可扩展的数据库服务,包括关系型数据库(MySQL、SQL Server、PostgreSQL)和非关系型数据库(MongoDB、Redis)。了解更多信息,请访问:腾讯云数据库
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

DjangoAutoField字段使用

Django是一个机智框架】 默认情况下Djang会为ORM中定义每一张表加上一个自增ID列,并且用这个列来做主键;出于一个MySQL-DBA工作经历我觉得 Djanog还真是机智;这样么说主要是因为我遇到过许多主从延时问题...补充知识:Django中models下常用Field以及字段参数 一、常见FieldType数据库字段类型 1、AutoField:自增Field域,自动增加一个数据库字段类型,例如id字段就可以使用该数据类型...,只要用于存储整型数据 4、BinaryField:主要是存储原始二进制数据 5、BooleanField:主要是存储布尔类型数据,0和1 6、CharField:主要存储字符串数据类型 7、DateField...: a、与之关联值设置为指定值,设置:models.SET(值) b、与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) 5、db_constraint:是否在数据库中创建约束...,默认为True,db_constraint一般使用在建立数据表连接关系当中(例如创建),如果使用False,则是限制了表之间没有关联,达到了软连接效果 五、元信息 ORM对应类里面包含另一个Meta

6.4K20

Django教程 —— 初步完善图书管理系统

图书信息(BookInfo) 英雄信息(HeroInfo) 1 : N 具体实现设计 BookType图书类型模型类 类属性 数据类型 备注 id IntegerField(整型主键、自增 type_name...CharField(字符型) 图书类型 BookInfo图书模型类 类属性 数据类型 备注 id IntegerField(整型主键、自增 book_type IntegerField(整型)ForeignKey...图书类型, title CharField(字符型) 图书名称 author CharField(字符型) 图书作者 pub_date CharField(字符型) 图书出版日期 isbn CharField...) 图书喜欢数 book_collect_num IntegerField(整型) 图书收藏数 HeroInfo图书英雄模型类 类属性 数据类型 备注 id IntegerField(整型主键自增...)Foreignkey 英雄所属图书, Django模型代码 # -*- coding:utf-8 -*- """ @Author :Hui @Desc :{模型设计模块} """ from

51820

Django分组聚合查询实例分享

增删改 一对多:先一后多,可以为对象或依赖表主键(publish and book) publish = Publish.objects.create() Book.objects.create(.......publish=publish|publish_id=publish.id) 删: 默认存在级联删除 改: book修改一定存在 多对多: 关系表获取(book(主键) and author...ForeignKey(): 字段 to= 关联模型类 (一对多) to_file = 关联字段,省略默认关联主键 on_delete (关联数据被删除时操作) models.CASCADE...__name’)) 断开关联— 多对多自动创建关系表 # 断开关联(db_constraint属性)多对多自动创建关系表 (book() and author) # 断开后依然支持Django...,依然支持Django ORM表查询语法(多对多借助关系表表查询) class Book(models.Model): name = models.CharField(max_length=20

1.8K10

Django教程 —— 初步完善图书管理系统

图书信息(BookInfo) 英雄信息(HeroInfo) 1 : N 具体实现设计 BookType图书类型模型类 类属性 数据类型 备注 id IntegerField(整型主键、自增 type_name...CharField(字符型) 图书类型 BookInfo图书模型类 类属性 数据类型 备注 id IntegerField(整型主键、自增 book_type IntegerField(整型)...ForeignKey 图书类型, title CharField(字符型) 图书名称 author CharField(字符型) 图书作者 pub_date CharField(字符型) 图书出版日期...) 图书喜欢数 book_collect_num IntegerField(整型) 图书收藏数 HeroInfo图书英雄模型类 类属性 数据类型 备注 id IntegerField(整型主键自增...)Foreignkey 英雄所属图书, Django模型代码 # -*- coding:utf-8 -*- """ @Author :Hui @Desc :{模型设计模块} """

93921

Django中ORM操作

1、无需表查询性能低,省硬盘空间(选项不固定时用) 2、在modle文件里不能动态增加(选项一成不变用Djangochoice) 其他字段 db_index = True 表示设置索引 unique...小写表名; 1对多:对象..关联表字段,values(字段__关联表字段) 多对多:字段.all() 反向表操作总结: 通过value、value_list、fifter...models.ForeignKey('UserType') 到B表(注意外表名加引号) 就意味着 写在写A表B表主键,(一列),代表B表多个(一行)称为1对多, 查询 总结:利用orm获取 数据库表中多个数据...,__列,反向是小写表名 UserInfo.objects.values_list('nid','ug_id','ug__title') 反向表: 反向操作无非2种方式: 1、通过对象形式反向跨表...().first() result = obj.userinfo_set.all() [userinfo对象,userinfo对象,] 小写表名 得到有关系列 #因为使用values取值取得是字典不是对象

4.7K10

Django数据库查询优化与AJAX

orm相关数据库查询优化 惰性查询 惰性查询指当我们只查数据库而不是用这些数据时,Django不会执行查询数据库代码,目的是减少不必要数据库操作,降低数据库压力。...,特点:内部自动表操作,会将括号内外字段所关联表与当前表自动拼接成一张表,然后表中数据一个一个查询出来封装成一个一个对象。...这样做好处:跨表查询也不需要重复走数据库,减轻数据库压力。select_related()括号内放多个字段,逗号隔开,会将多个字段关联表与当前表拼成一张大表。...,特点:按步骤查询多张表,然后查询结果封装到对象中,给用户感觉好像还是表操作,括号内支持传多个字段,每放一个字段就会多走一条SQL语句,多查一张表。...3.Django后端针对json格式数据不会做任何处理,只是数据原封不动放在了request.body中,我们需要手动对其进行反序列化处理。

2.3K20

Django之路由层

所以外字段健在书表中 publish = models.ForeignKey(to='Publish') # to用来指代跟哪张表有关系 默认关联就是表主键字段 """...一对多字段创建时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id """ # 书跟作者是多对多关系字段建在任意一方都可以...,建议建在查询频率高一方 一对多字段创建时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id 多对多关系,django orm会自动帮我们创建书籍和作者第三张关系表...3.9Django1.x和2.x版本路由层区别 1.Django2.x中默认url通过path接收,path第一个输入值不是正则表达式,里面写是什么就按什么匹配。...3.path提供了五种转换器,能够匹配到数据转成对应数据类型而且还支持自定义转换器,用于解决数据类型转换问题和正则表达式冗余问题。

1.3K21

Django---ORM操作大全

1、无需表查询性能低,省硬盘空间(选项不固定时用) 2、在modle文件里不能动态增加(选项一成不变用Djangochoice) 其他字段 db_index = True 表示设置索引 unique...小写表名; 1对多:对象..关联表字段,values(字段__关联表字段) 多对多:字段.all() 反向表操作总结:  通过value、value_list、fifter 方式反向跨表...1对多关系,也称为多对多关系; 在orm中设置如果 A表设置了字段user=models.ForeignKey('UserType')到B表(注意外表名加引号) 就意味着 写在写A表B表主键,...','ug_id','ug__title')    #注意正向表是  __列 反向是小写表名 3....小写表名 得到有关系列 #因为使用values取值取得是字典不是对象,所以需要 小写表名(表)__ v = UserGroup.objects.values('id'

6.8K100

Django模型

django会为表创建自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长主键列。...自Django3.2后,可以在settings.py中配置DEFAULT_AUTO_FIELD参数来设置主键数据类型,默认是DEFAULT_AUTO_FIELD = ‘django.db.models.BigAutoField...’,在Django3.2之前,默认生成主键数据类型是AutoField.... 这个东西,通常都是在业务逻辑层面来实现,而不是在数据库中实现。但是通常大家学习数据库课程中,都会有数据库设计范式,其中有个第三范式就是专指约束。在这里只是简单介绍一下。...:通过使用models.ForeignKey来设置,ForeignKey第一个参数是要关联模型类名,第二个参数是on_delete。

1.9K20

收藏 | Mysql数据库基础-常用入门命令-干货

不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF...select 字段1,字段2... from 主表 inner join 从表 on 主表.主键=从表. 例如:查询学生信息[ 成绩、名字、班级 ] 我们给学生表添加一个学生信息,然后使用该学生主键....主键=从表. 例如,上面的成绩id为102学生, 我们使用右连接查询。...from 主表 left join 从表1 on 主表.主键=从表1. left join 从表2 on 主表.主键=从表2. # 这里和从表2on条件看实际情况,也会出现从表...1.主键=从表2.情况 left join 从表3 on 主表.主键=从表3. # 这里可以是(从表1或从表2).主键=从表2.情况 left join ...

1.5K11

MySQL入门基础教程大全

不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF...select 字段1,字段2... from 主表 inner join 从表 on 主表.主键=从表. 例如:查询学生信息[ 成绩、名字、班级 ] 我们给学生表添加一个学生信息,然后使用该学生主键....主键=从表. 例如,上面的成绩id为102学生, 我们使用右连接查询。...from 主表 left join 从表1 on 主表.主键=从表1. left join 从表2 on 主表.主键=从表2. # 这里和从表2on条件看实际情况,也会出现从表...1.主键=从表2.情况 left join 从表3 on 主表.主键=从表3. # 这里可以是(从表1或从表2).主键=从表2.情况 left join ...

1.5K10

XCode最佳实践之最佳数据类型

但是,XCode多数据库反向工程,也是有代价,不同数据库数据类型相差十万八千里,我们不可能完全支持。 所以,我们只做了常见一些数据类型支持,但是这些已经足以满足99%要求。...最佳数据类型如下: 1,整型。Int32是标准配置,这个必须有的。在Oracle,整型就是小数为0Numeric 2,长整型。Int64,大部分数据库都有吧。 3,短整型。...1,除了字符串长度外,其它类型绝对绝对,尽可能不要设置其它属性,包括长度、精度、小数位数,否则XCode不能实现完美迁移 2,XCode目前不支持各种数据库。...新增表间关系是通过猜测得到,规则:字段名等于另一个表名加主键名时,认为是 3,不要用Guid类型和二进制类型,XCode只能支持正向工程,不能支持它们反向工程。...最后补一句: 我们只做最常见80%日常工作,什么特别的情况,自己想办法

1.1K60

数据库字段及索引设计规范

字符串转换成数字类型存储,如: IP 地址转换成整形数据 MySQL 提供了两个方法来处理 ip 地址 inet_aton 把 ip 转为无符号整型 (4-8 位) inet_ntoa 把整型 ip...过大长度会消耗更多内存。 2. 避免使用 TEXT,BLOB 数据类型,最常见 TEXT 类型可以存储 64k 数据 a....而且对于这种数据,MySQL 还是要进行二次查询,会使 sql 性能变得很差,但不是说一定不能使用这样数据类型。...Innodb 是按照主键索引顺序来组织表 不要使用更新频繁列作为主键,不适用多列主键(相当于联合索引) 不要使用 UUID,MD5,HASH,字符串列作为主键(无法保证数据顺序增长) 主键建议使用自增...索引 SET 规范 尽量避免使用约束 不建议使用约束(foreign key),但一定要在表与表之间关联上建立索引 可用于保证数据参照完整性,但建议在业务端实现 会影响父表和子表写操作从而降低性能

1.1K20

Mysql基础

主键类型不一定非是整型 表纪录操作 表纪录之增,删,改 -- 1.增加一条记录insert /*insert [into] tab_name (field1,filed2,......id INT PRIMARY KEY auto_increment, name VARCHAR (20), charger_id TINYINT, --切记:作为一定要和关联主键数据类型保持一致...语句 --约束对子表含义: 如果在父表中找不到候选,则不允许在子表上进行insert/update --约束对父表含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对...-- 应匹配行候选时,父表行为取决于:在定义子表时指定 -- on update/on delete子句...记录时,同步update/delete掉子表匹配记录 -----级联删除:如果父表中记录被删除,则子表中对应记录自动被删除-------- FOREIGN KEY (charger_id

4.2K20

Django model 层之Models与Mysql数据库小结

Django 1.10新增。 BigIntegerField 64位整型,类似IntegerField。...如果设置了该选项值,那么默认表单组件变为一个select box,而不是标准是text field,且将被限制从给定choice中选择choice。...删除被参照表某条表记录,同时级联删除参照表中,同待删除记录存在外关联关系记录。 PROTECT 删除被参照表中某条表记录,如果参照表中,存在与该记录有关系记录,则不让删除。...SET_NULL 删除被参照表某条表记录,设置参照表中,同待删除记录存在外关联记录列值为null。当且仅当设置了null=True选项时可用。...SET_DEFAULT 删除被参照表某条表记录,设置参照表中,同待删除记录存在外关联记录列值为默认值。必须为列设置默认值。

2.2K20

MySQL 数据库 增删查改、克隆、 等操作

扩展功能,字段值自增等 数据表高级操作 克隆表,数据表数据记录生成到新表中 删除记录后主键记录重头开始自增 创建临时表 创建约束,保证数据完整性和一致性 MySQL 六种约束 ----...SQL 字段数据类型 int:整型,默认长度是11 float:单精度浮点,4字节32位 double:双精度浮点,8字节64位 char:不可变长字符类型,读取速度快,耗空间,长度不足会补空格。...,保证数据完整性和一致性 定义:如果同一个属性字段X 在表一中是主键,而在表二中不是主键,则字段X称为表二。...主键表和理解: (1)以公共关键字作主键表为主键表(父表、主表) (2)以公共关键字作表为表(从表、外表) 注意: 1. 与关联主表字段必须设置为主键。 2....表 hobid 字段和 HOBBY 表 hobid 字段建立关联。

5.8K20

MySQL常用基础 - 小白必看

; 数据类型数据类型 关键字 整型 int integer 浮点类型 double, floatdecimal(6,2)整个小数长5位,小数点不占位,小数是两位(9999.99) 字符串型 char...定义:约束是表一个特殊字段,经常和主键约束一起使用,对于两个具有关联关系表来说,相关字段中主所在表就是主表(父表),所在表就是从表(子表) 特点(定义一个时,需要遵守规则): 主表必须已经存在于数据库中...,或者是当前正在创建表 必须为主表定义主键 主键不能包含空值,但是允许在外中出现空值,也就是说,只要每个非空值出现在指定主键中,那么这个内容就是正确 在主表表名后面指定列名或列名组合...,那么这个列或列组合必须是主表主键或候选 中列数目必须和主表主键数目相同 中列数据类型必须和主表主键数据类型相同 方式一:在创建表时候设置约束 语法: constraint...实现:需要借助第三张中间表,中间表至少包含两个字段,多对多关系拆成一对多关系,中间表至少有两个,分别指向原来两个表主键 多表联合查询 介绍:多表查询就是同时查询两个或两个以上表,因为有时候用户在查看数据时候

1.2K30

Django 再谈一谈json序列化

我们知道JSON字符串是目前流行数据交换格式,在pyhton中我们通过json模块,常用数据类型转化为json字符串。但是,json支持转化数据类型是有限。...json.dumps(user_list)) # TypeError: Object of type 'QuerySet' is not JSON serializable 报错,QuerySet不是...那么有什么办法可以解决呢?...(可以是默认id主键字段,也可以是用户自定义主键字段) 观察序列化结果,发现这种方式服务端数据库表名都暴露了;另外serializers不支持表序列化,只能拿到另一张表id。...经过一番度娘搜索,发现有如下解决方案: 使用django.core自带serializers模块: #django ORM Queryset对象默认无法被直接json.dumps()序列化,django.core

1.2K10

【MYSQL】表约束

前言 真正约束字段数据类型,但是数据类型约束很单一,需要有一些额外约束,更好保证数据合法性,从业务逻辑角度保证数据正确性。比如有一个字段是email,要求是唯一。...整型不是4字节码?这个10又代表什么呢?其实没有zerofill这个属性,括号内数字是毫无意义。 zerofill作用就是用0在有效数字前面用0补齐剩下空间,直至设定宽度。...int auto_increment primary key, name varchar(5) unique ); 八、 用于定义主表和从表之间关系:约束主要定义在从表上,主表则必须是有主键约束或...当定义后,要求列数据必须在主表主键列存在或为null 关键词:foreign key (字段名) references 主表(列) 案例: 我们可以看到,学生信息是和班级表有关系:某个班还有学生时候我们不能直接删除这个班数据...因此诞生了来约束。

21740
领券