Django 模型
Django 模型是数据库中的一个表格。
Django 模型
在本教程中,到目前为止,输出一直是来自 Python 或 HTML 模板的静态数据。
现在我们将了解 Django 如何让我们处理数据,而无需在过程中更改或上传文件。
在 Django 中,数据是在称为模型的对象中创建的,实际上是数据库中的表格。
创建表格(模型)
要创建模型,请导航到 /members/
文件夹中的 models.py
文件。
打开它,并通过创建一个 Member
class
来添加 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
这将导致以下输出
针对 'members' 的迁移
members\migrations\0001_initial.py
- 创建模型 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 语句并执行它。
运行迁移命令
py manage.py migrate
这将导致以下输出
要执行的操作
应用所有迁移:admin, auth, contenttypes, members, sessions
正在运行迁移
应用 members.0001_initial... OK
(myworld) C:\Users\Your Name\myworld\my_tennis_club>
现在,您的数据库中有一个 Member
表格!
查看 SQL
作为旁注:您可以查看从上述迁移执行的 SQL 语句。您只需运行以下命令,其中包含迁移编号
py manage.py sqlmigrate members 0001
这将导致以下输出
BEGIN;
--
-- 创建模型 Member
--
CREATE TABLE "members_member" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "firstname" varchar(255) NOT NULL, "lastname" varchar(255) NOT NULL); COMMIT;