Django 模型是数据库中的一个表。
到目前为止,在本教程中,输出一直是来自 Python 或 HTML 模板的静态数据。
现在我们将看到 Django 如何允许我们处理数据,而无需在此过程中更改或上传文件。
在 Django 中,数据是在称为模型的对象中创建的,实际上是数据库中的表。
要创建模型,请导航至models.py
文件在/members/
文件夹。
打开它,然后添加一个Member
通过创建一个表Member
class
,并描述其中的表字段:
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 个字符。
当我们创建 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
表的字段,这是一个auto increment number
(第一条记录的值为 1,第二条记录的值为 2 等),这是 Django 的默认行为,您可以通过描述自己的行为来覆盖它id
场地。
该表还没有创建,您必须再运行一个命令,然后 Django 将根据新文件中的内容创建并执行一条 SQL 语句/migrations/
文件夹。
运行迁移命令:
py manage.py migrate
这将导致以下输出:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, members, sessions
Running migrations:
Applying members.0001_initial... OK
(myworld) C:\Users\
Your Name\myworld\my_tennis_club>
现在你有一个Member
您数据库中的表!
旁注:您可以查看从上面的迁移中执行的 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;
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!