Django 模型


Django 模型是数据库中的一个表。


Django模型

到目前为止,在本教程中,输出一直是来自 Python 或 HTML 模板的静态数据。

现在我们将看到 Django 如何允许我们处理数据,而无需在此过程中更改或上传文件。

在 Django 中,数据是在称为模型的对象中创建的,实际上是数据库中的表。


创建表(模型)

要创建模型,请导航至models.py文件在/members/文件夹。

打开它,然后添加一个Member通过创建一个表Memberclass,并描述其中的表字段:

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,也是一个文本字段,包含成员的姓氏。

两个都firstnamelastname设置为最多 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表的字段,这是一个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

旁注:您可以查看从上面的迁移中执行的 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;