📅  最后修改于: 2023-12-03 15:06:18.345000             🧑  作者: Mango
在 Django 模型中,最常使用的是主键(Primary Key)。主键是用来唯一标识每个数据库表中的每个记录的方式。
在 Django 中,可以使用多种方式定义主键。
Django默认情况下,会为每个模型生成一个名为id
的主键。
class MyModel(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
# 自动生成主键 `id`
在数据库中会生成这样的表:
CREATE TABLE myapp_mymodel (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" varchar(50) NOT NULL,
"email" varchar(254) NOT NULL
);
Django 允许你使用自定义字段作为主键。你可以使用 primary_key=True
参数指定某个字段作为主键。
class Person(models.Model):
social_security_numner = models.CharField(max_length=11, primary_key=True)
name = models.CharField(max_length=50)
email = models.EmailField()
# 自定义主键
在数据库中会生成这样的表:
CREATE TABLE myapp_person (
"social_security_number" varchar(11) NOT NULL PRIMARY KEY,
"name" varchar(50) NOT NULL,
"email" varchar(254) NOT NULL
);
如果你想使用自增主键,你可以使用 AutoField
字段。
class Blog(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null=True)
class Meta:
db_table = 'blog'
id = models.AutoField(primary_key=True)
# 自动增量主键
在数据库中会生成这样的表:
CREATE TABLE myapp_blog (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"title" varchar(50) NOT NULL,
"content" text NOT NULL,
"created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL
);
如果你想使用 UUID 作为主键,你可以使用 UUIDField
字段。UUID 可以保证在分布式场景下,每个节点生成的 ID 都是唯一的。
import uuid
class MyModel(models.Model):
name = models.CharField(max_length=50)
my_uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
# UUID 主键
在数据库中会生成这样的表:
CREATE TABLE myapp_mymodel (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" varchar(50) NOT NULL,
"my_uuid" uuid NOT NULL UNIQUE
);
在 Django 中定义主键的方式有很多种,你可以选择默认主键、自定义主键、自动增量主键、UUID 主键等方式。这些方式都可以满足不同的需求。选择哪种方式,取决于你的具体需求。