Django 模型
Django 模型是数据库中的一个表。
Django 模型
到目前为止,本教程中的输出都是来自 Python 或 HTML 模板的静态数据。
现在我们将看到 Django 如何允许我们处理数据,而无需更改或上传文件。
在 Django 中,数据是通过称为模型(Models)的对象创建的,实际上它们是数据库中的表。
创建表(模型)
要创建模型,请导航到 `/members/` 文件夹中的 models.py
文件。
打开它,然后通过创建 Member
类
来添加一个 Member
表,并在其中描述表字段。
my_tennis_club/members/models.py
:
from django.db import models
class Member(models.Model):
firstname = models.CharField(max_length=255)
lastname = models.CharField(max_length=255)
第一个字段 firstname
是一个文本字段,将包含会员的名字。
第二个字段 lastname
也是一个文本字段,包含会员的姓氏。
firstname
和 lastname
都被设置为最多可以包含 255 个字符。
SQLite 数据库
当我们创建 Django 项目时,我们得到了一个空的 SQLite 数据库。
它被创建在 my_tennis_club
的根文件夹中,文件名为 db.sqlite3
。
默认情况下,Django 项目中创建的所有模型都将在此数据库中作为表创建。
迁移
现在我们已经在 models.py
文件中描述了一个模型,我们必须运行一个命令来实际在数据库中创建表。
导航到 `/my_tennis_club/` 文件夹并运行此命令:
py manage.py makemigrations members
这将产生以下输出:
Migrations for 'members'
members\migrations\0001_initial.py
- Create model Member
(myworld) C:\Users\Your Name\myworld\my_tennis_club>
Django 创建一个描述更改的文件,并将该文件存储在 `/migrations/` 文件夹中。
my_tennis_club/members/migrations/0001_initial.py
:
# Generated by Django 4.1.2 on 2022-10-27 11:14
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Member',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('firstname', models.CharField(max_length=255)),
('lastname', models.CharField(max_length=255)),
],
),
]
请注意,Django 为您的表插入了一个 id
字段,它是一个 自动递增数字
(第一个记录的值为 1,第二个记录为 2 等),这是 Django 的默认行为,您可以通过描述自己的 id
字段来覆盖它。
表尚未创建,您需要再运行一个命令,然后 Django 将基于 `/migrations/` 文件夹中新文件的内容,创建并执行一个 SQL 语句。
运行 migrate 命令
py manage.py migrate
这将产生以下输出:
要执行的操作
应用所有迁移:admin, auth, contenttypes, members, sessions
正在运行迁移
Applying members.0001_initial... OK
(myworld) C:\Users\Your Name\myworld\my_tennis_club>
现在您的数据库中有一个 Member
表了!
查看 SQL
顺带一提:您可以通过运行此命令(带有迁移编号)来查看上面迁移中执行的 SQL 语句。
py manage.py sqlmigrate members 0001
这将产生以下输出:
BEGIN;
--
-- Create model Member
--
CREATE TABLE "members_member" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "firstname" varchar(255) NOT NULL, "lastname" varchar(255) NOT NULL); COMMIT;