You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中Modelobject.id与Modelobject_id的区别是什么?

Django中模型实例的id与xxx_id属性区别
  • Modelobject.id:模型自身的主键属性
    这是Django给所有模型默认生成的主键属性(未自定义主键的前提下),等价于Modelobject.pk,返回的是主键对应的Python数据类型(比如整数),直接对应数据库表的主键字段值。

  • Modelobject_id:外键字段的原始主键值属性
    这个属性只在模型包含外键字段时存在,比如你的模型有个外键字段author,那么对应的author_id就是存储在数据库里的该外键的主键值(整数)。它不需要触发额外的数据库查询就能拿到,而author属性则会返回关联的模型实例(首次访问会查询数据库)。

为什么你会觉得两者表现一致?

大概率是测试场景的巧合:比如你可能误把某个外键的xxx_id和模型自身的id搞混了,或者刚好两者的数值相同。但本质上,id是模型自己的主键,而xxx_id是外键对应的原始值,只有当模型有对应外键时才会存在这个后缀属性。

举个实际代码例子:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
  • 拿Book实例my_book来说:
    • my_book.id → 是Book表自身的主键值
    • my_book.author_id → 直接返回关联Author的主键整数,不用查库
    • my_book.author → 返回关联的Author实例,首次访问会触发数据库查询

而对于Author实例my_author,只有my_author.id,不存在my_author.author_id,除非你把Author的主键字段特意命名为author_id。

内容的提问来源于stack exchange,提问作者Naveen Kumar R V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:15:54