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

Django模型选择字段如何返回对象的主键而不是显示值

在Django中,模型选择字段可以通过使用to_field_name参数来返回对象的主键而不是显示值。to_field_name参数用于指定模型中作为主键的字段名。

例如,假设我们有一个模型Book,其中有一个外键字段author,它引用了另一个模型Author的主键字段。默认情况下,当我们在模型表单或模板中使用author字段时,它会显示Author模型对象的字符串表示形式(通常是__str__方法返回的值)。

要返回Author模型对象的主键而不是显示值,我们可以在模型字段中使用to_field_name参数。例如:

代码语言:txt
复制
class Book(models.Model):
    author = models.ForeignKey(Author, to_field_name='id', on_delete=models.CASCADE)
    # 其他字段...

在上面的例子中,我们将to_field_name参数设置为'id',这样当我们访问Book模型的author字段时,它将返回Author模型对象的主键值。

这种方法适用于任何模型选择字段,包括ForeignKeyOneToOneFieldManyToManyField

推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云对象存储COS。

腾讯云数据库MySQL产品介绍链接地址:https://cloud.tencent.com/product/cdb

腾讯云对象存储COS产品介绍链接地址:https://cloud.tencent.com/product/cos

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

相关·内容

使用信号监控 Django 模型对象字段变化

其中,灵活使用其内置模型信号 (Model Signals) 接收功能就可以监控大部分模型对象 (Model instances) 变化。...监控特定字段 (field) 变化 从上一段代码可以知道,通过接收模型 post_save 信号,可以得知发生了保存模型对象操作,并且还可以区分出是创建了模型对象还是更新了模型对象。...然而,模型信号并没有提供针对特定字段变化广播功能,虽然该信号提供了 update_fields 参数,但是并不能证明在该参数中字段字段一定发生了变化,所以我们要采用一个结合 post_init...__original_name, instance.name)) 简单说就是在该模型广播 post_init 信号时候,在模型对象中缓存当前字段;在模型广播 post_save (或 pre_save...)时候,比较该模型对象的当前字段与缓存字段,如果不相同则认为该字段发生了变化。

1.8K20

django 1.8 官方文档翻译: 2-3-1 模型实例参考

在调用save() 之前无法知道ID ,因为这个是通过数据库不是Django 计算。...如果你手工赋值一个自增主键,请确保不要使用一个已经存在主键值!如果你使用数据库中已经存在主键值创建一个新对象Django 将假设你正在修改这个已存在记录不是创建一个新记录。...关于这个细微差别的更多信息,参见上文显示指定主键 和下文强制使用INSERT 或UPDATE。 在Django 1.5 和更早版本中,在设置主键时,Django 会作一个 SELECT。...通过将更新基于原始字段不是显式赋予一个新,这个过程可以避免竞态条件而且更快。Django 提供F 表达式 用于这种类型相对更新。...最明显是在Django Admin 站点显示一个对象和在模板中插入对象时候。 所以,你应该始终让__str__() 方法返回模型一个友好、人类可读形式。

1.9K10

00x: Django models.Model详解

choices: 一个可迭代元祖,用来作为字段内容选择。若这个给定,默认表单插件将会变成一个单选框不是简单文本字段,并且单选框中选项数目由给定choices来限定。...给定一个model实例,用于显示choices可以通过使用get_FOO_display()方法来获取,例如: default: 这个选项用于设置该字段默认。...可以是一个或者可以是一个可以调用对象。若是可调用对象,它会在每次新对象创建时候调用。 help_text: 额外帮助文本用于显示在widget上。它对文档生成很有用。...主键字段是只读。如果你改变了现有对象主键然后保存了这个对象,一个新对象就会和旧对象并行创建。啥意思呢?...get_absolute_url(): 该函数告诉Django如何计算一个对象url。Django 在admin接口中使用该函数,在需要时候返回对象url。

1.6K20

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

如果设置了choices ,默认表单将是一个选择不是标准文本框,而且这个选择选项就是choices 中选项。...可以是一个或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。 help_text 表单部件额外显示帮助内容。即使字段不在表单中使用,它对生成文档也很有用。...详见自增主键字段主键字段是只读。如果你在一个已存在对象上面更改主键并且保存,一个新对象将会在原有对象之外创建出来。...查询集始终返回请求模型 也就是说,没有办法让DJango在查询Person对象返回MyPerson对象。Person 对象查询集会返回相同类型对象。...代理对象要点是,依赖于原生Person对象代码仍然使用它,而你可以使用你添加进来扩展对象(它不会依赖其它任何代码)。不是将Person模型(或者其它)在所有地方替换为其它你自己创建模型

4.9K20

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

如果设置了 choices ,Django 管理后台就会显示选择框,不是标准文本框,而且这个选择选项就是 choices 中元组。...在管理后台编辑该对象表单中,它显示字段下面。即使你对象无须在后台进行管理,它对于文档化也是很有用。 primary_key 如果为 True,那么这个字段就是 model 主键。...如果你在一个已存在对象上面更改主键并且保存,一个新对象将会在原有对象之外创建出来。...当某个对象被要强制转换成字符串,或是要做为字符串显示时,Python 和 Django 就会调用该方法。最典型,在命令行或管理后台中显示对象,就会用到 unicode() 方法。...但在抽象基类上这样做就会引发一个很严重问题。因为 Django 会将基类字段添加到每个子类当中,每个子类字段属性都完全相同 (这里面就包括 related_name)。

3.1K30

Django 1.10中文文档-第一个应用Part2-模型和管理站点

Field还可以有各种可选参数;在上例中,我们将votes默认设置为0。 最后,使用ForeignKey定义关系。这告诉Django每个选择是与单个问题相关。...1 # 通过python属性调用方式,访问模型字段 >>> q.question_text "What's new?"...让我们来修复这个问题,让Django在打印对象显示一些我们指定信息。...它就是我们先前创建一个question,并且通过str方法帮助,显示了较为直观信息,不是一个冷冰冰对象类型名称。 ? 点击What’s up?进入编辑界面: ?...每一种类型字段Django管理站点都知道如何显示它们; 每个DateTimeField字段都会有个方便JavaScript快捷方式。

2.2K60

Django使用】10大章31模块md文档,第5篇:Django模板和数据库使用

当你考虑开发现代化、高效且可扩展网站和Web应用时,Django是一个强大选择。...变量|过滤器:参数列举几个如下:safe,禁用html转义(显示html标签样式,不是字符串)length,长度,返回字符串包含字符个数,或列表、元组、字典元素个数。...default,默认,如果变量不存在时则返回默认。...,不需要编写SQL语句Django框架实现了ORM 功能:不需要直接面向数据库编程,通过模型类和对象完成数据表增删改查操作自动生成数据库表通过配置切换使用不同数据库ORM 开发步骤配置数据库定义模型类...表示字段设置为了主键,一般作为AutoField选项使用是default-默认否blankFalse在django管理后台新增或编辑一条表数据时,该字段是否允许为空;null是数据库范畴概念,blank

15810

django开发】知识经验总结共50页md文档。今日分享:django配置和数据库操作详解

作用:修改代码文件,程序自动重启Django程序出现异常时,向前端显示详细错误追踪信息,例如而非调试模式下,仅返回Server Error (500)注 意:部署线上运行Django不要运行在调式模式下...def __str__(self): """定义每个数据对象显示信息""" return self.name # 准备人物列表信息模型类class...2 ) 关于主键django会为表创建自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长主键列。..., 则在表中会为此字段创建索引,默认是Falsedefault默认primary_key若为True,则该字段会成为模型主键字段,默认是False,一般作为AutoField选项使用unique...如果为True, 这个字段在表中必须有唯一,默认是Falsenull 是数据库范畴概念,blank是表单验证范畴6 ) 外键在设置外键时,需要通过 on_delete 选项指明主表删除数据时,对于外键引用表数据如何处理

19910

django模型

每个模型对 应数据库中唯一一张表 如何编写模型 模型:每个模型都用一个类表示,该类继承自django.db.models.Model。...EmailField TextField TimeField 更多 自增主键字段 默认情况下Django会给每个模型添加下面这个字段 id = models.AutoField(primary_key...——default 字段默认,可以是一个或者调用对象 字段选项——primary_key 如果为True,那么这个字段就是模型主键 字段选项——unique 如果该设置为True,这个字段在整张表中必须是唯一...这个异常是正在查询模型一个属性 —— 所以在上面的代码中, 如果没有主键为1 Entry 对象Django 将引发一个Entry.DoesNotExist。...指定显示列 values(返回一个列表) 返回一个ValuesQuerySet——QuerySet一个子类,迭代时返回字典不是模型实例对 象。

3.1K20

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

在实际项目中,数据模型通常通过数据库实现持久化操作,关系型数据库在过去和当下都是持久化首选方案,下面我们以MySQL为例来说明如何使用关系型数据库来实现持久化操作。...字段属性primary_key用于设置主键,max_length用来设置字段最大长度,db_column用来设置数据库中与字段对应列,verbose_name则设置了Django后台管理系统中该字段显示名称...将QuerySetexists()方法返回用于if条件。 用DecimalField来存储货币相关数据不是FloatField。 定义__str__方法。 不要将数据文件放在同一个目录中。...unique 设置为True时,表中字段必须是唯一 verbose_name 字段在后台模型管理显示名称,未指定时使用字段名称 ForeignKey属性 limit_choices_to:是一个...Q对象返回一个Q对象,用于限制后台显示哪些对象

2.2K30

Django项目知识点(三)

本文一篇完全介绍django最重要model 6.django model 模型是数据唯一而且准确信息来源。它包含正在储存数据重要字段和行为。一般来说,每一个模型都映射一个数据库表。...指定这个属性后你会得到一个get_xxx_order()和set_xxx_order()方法,通过它们你可以设置或者回去排序对象 ordering 这个字段是告诉Django模型对象返回记录结果集是按照哪个字段排序...注意:Django在一个模型中只允许有一个自增字段,并且该字段必须为主键!...DateTimeField.auto_now_add 这个参数默认也为False,设置为True时,会在model对象第一次被创建时,将字段设置为创建时时间,以后修改对象时,字段不会再更新...default 默认 verbose_name   Admin中字段显示名称,如果不设置该参数时,则与属性名。

1.8K30

Django】在大型项目中django性能模型字段primary_key

模型字段 序列本身由正好两个项目的迭代项组成(例如,[(A,B),(A,C)…]),作为该字段选择。如果给出了选择,它们将通过模型验证来执行。...默认表单部分将是包含这些选项选择框,不是标准文本字段。 每个元组中第一个元素是要在模型上设置实际,第二个元素是人类可读名称。...,Django将添加一个方法来检索字段当前可读名称。...如果没有为模型任何字段指定主键_Key=True,Django将自动添加一个字段来保存主键,因此不需要在任何字段上设置主键_Key=True,除非想覆盖默认主键行为。...一个对象只允许有一个主键主键字段是只读。如果更改现有对象主键值并保存它,则会在旧对象旁边创建一个新对象

2K20

Django模型---ORM简介

ORM   ORM,是“对象-关系-映射”简称,它实现了数据模型与数据库解耦,即数据模型设计不需要依赖于特定数据库,通过简单配置就可以轻松更换数据库,这极大减轻了开发人员工作量,不需要面对因数据库变更导致无效劳动...推荐使用这个字段不要用 BooleanField 加 null=True 选项 admin 用一个选择框 (三个可选择: "Unknown", "Yes" 和 "No...(2)default 字段默认。可以是一个或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。 (3)primary_key 如果为True,那么这个字段就是模型主键。...(4)unique 如果该设置为 True, 这个数据字段在整张表中必须是唯一 (5)choices 由二元组组成一个可迭代对象(例如,列表或元组),用来给字段提供选择项。...如果设置了choices ,默认表单将是一个选择不是标准文本框,而且这个选择选项就是choices 中选项。

1.5K10

Django教程 —— 模型类详解

引言 在之前 Django模型设计 中简单介绍了如何定义模型类,在这篇中将做一个汇总。让大家更加了解Django模型类。...: 当前选择数据库支持字段类型 渲染管理表单时使用默认html控件 在管理站点最低限度验证 Django 会为表创建自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后...如果具有不同主键字段模型,它还可以提高您一致性。 模型字段属性及选项 模型类属性命名限制 不能是python保留关键字。...primary_key 若为True,则该字段会成为模型主键字段,默认是False。 unique 如果为True, 这个字段在表中必须有唯一,默认是False。...verbose_name 详细名称,就是起一个更可读名字 choices 对模型字段选择枚举。

1.7K20

【云+社区年度正文】Django从入门到精通No.2----模型

二、模型定义 模型可以定义储存数据字段,比如我们在进行表单提交时候,一些注册信息就可以利用模型来进行管理,然后统一提交到数据库中。简单来说,模型是与数据库有关操作集合。...必填参数primary_key=True,则成为数据库主键,无该字段时,django自动创建,一个model不能有两个该字段。...ImageField ClearableFileInput 所有属性和方法都继承自 FileField ,此外验证上传对象不是有效图像。增加了 height 和 width 两个属性。...help_text: 字段提示信息 choices:显示选择内容,用不变动数据放在内存中以避免跨表操作 verbose_name: 显示字段名称 error_messages:自定义错误信息...与之关联设置为可执行对象返回,设置:models.SET(可执行对象) related_name=None # 反向操作时,使用字段名,用于代替表名_set related_query_name

2.1K00

37.Django1.11.6文档

如果设置了choices ,默认表单将是一个选择不是标准文本框,而且这个选择选项就是choices 中选项。...Field 将返回一个转换后不是引发clean()。...如果字段是必选,它会强制用户选择一个选项。 如果模型字段default 且具有一个显示default ,将不会包含空选项(初始将选择blank=False )。...如果要使用内联模型来表示多对多关系,则必须告知Django管理员不是显示此窗口小部件 - 否则您最终会在管理页面上看到两个窗口小部件,用于管理关系。...我们使用这个例子来演示如何利用会话对象来工作,不是一个完整logout()实现。 设置测试cookie  为了方便,Django 提供一个简单方法来测试用户浏览器是否接受Cookie。

24.2K80

05.Django基础五之django模型层(一)单表操作

推荐使用这个字段不要用 BooleanField 加 null=True 选项 admin 用一个选择框 (三个可选择: "Unknown", "Yes" 和 "No...如果可调用 ,每有新对象被创建它都会被调用,如果你字段没有设置可以为空,那么将来如果我们后添加一个字段,这个字段就要给一个default (3)primary_key 如果为True,那么这个字段就是模型主键...(4)unique 如果该设置为 True, 这个数据字段在整张表中必须是唯一 (5)choices 由二元组组成一个可迭代对象(例如,列表或元组),用来给字段提供选择项。...如果设置了choices ,默认表单将是一个选择不是标准文本框,而且这个选择选项就是choices 中选项。...四、删除表纪录     delete()方法调用者可以是一个model对象,也可以是一个queryset集合。     删除方法就是 delete()。它运行时立即删除对象返回任何

2.9K10
领券