django 中的 Model.id 和 Model.pk 有什么区别

pythonDjango

1个回答

写回答

jdnjsnsbs

2025-06-23 15:20

+ 关注

Django
Django

Django中,Model是用来定义数据库中的表结构的类,而Model的id和pk都是用来表示该表中的主键字段。虽然它们在大多数情况下是等价的,但它们之间还是有一些微小的区别。

首先,id是Model类的一个属性,它是一个自增的整数字段,用来唯一标识每一条记录。id字段在定义Model时会自动添加,无需手动定义。而pk(Primary Key)则是代表主键字段的通用属性,它可以是id字段,也可以是其他字段。

其次,id字段在数据库中的命名为“表名_id”,而pk字段的命名可以自定义。这意味着,如果我们在定义Model时手动添加了一个名为id的字段,并且把它作为主键,那么在数据库中就会有两个名为id的字段。

此外,在一些特殊情况下,使用Model.id和Model.pk可能会出现一些差异。例如,当我们在创建一条新的记录时,如果指定了主键字段的值,那么Model.id会随之更新为指定的值,而Model.pk则不会改变。这是因为Model.pk是在对象被保存到数据库后才赋值的,而Model.id是在对象被创建时就生成的。

Model.id和Model.pk在大多数情况下是等价的,都可以用来表示Model对象的主键值。但需要注意的是,如果我们手动定义了一个名为id的字段,并且将其作为主键,那么在数据库中就会有两个名为id的字段。

示例代码:

Python

from Django.db import models

class Book(models.Model):

id = models.AutoField(primary_key=True)

title = models.CharField(max_length=100)

author = models.CharField(max_length=50)

price = models.DecimalField(max_digits=6, decimal_places=2)

book1 = Book.objects.create(title='Harry Potter', author='J.K. Rowling', price=29.99)

print(book1.id) # 输出自动分配的主键值

print(book1.pk) # 输出自动分配的主键值

在上面的示例中,我们定义了一个Book模型,其中id字段被手动定义为主键字段。在创建一本新书的时候,我们可以通过book.id或book.pk来获取自动生成的主键值。这两种方式输出的结果是相同的。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号