📜  主键 django 模型 - Python (1)

📅  最后修改于: 2023-12-03 15:06:18.345000             🧑  作者: Mango

主键 Django 模型 - Python

在 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 主键

如果你想使用 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 主键等方式。这些方式都可以满足不同的需求。选择哪种方式,取决于你的具体需求。