یک مدل یا Model در جنگو، یک جدول در پایگاه داده شما است.
مدل ها یا Models در جنگو
تا کنون در این آموزش، خروجی داده های ثابت از قالب های پایتون یا HTML بوده است.
اکنون خواهیم دید که چگونه جنگو به ما اجازه می دهد تا بدون نیاز به تغییر یا آپلود فایل ها با داده ها کار کنیم.
در جنگو، داده ها در اشیائی به نام Models ایجاد می شوند و در واقع جداولی در یک پایگاه داده هستند.
ساخت جدول (Model)
برای ایجاد یک مدل، به فایل models.py
در پوشه /members/
بروید.
آن را باز کنید و با ایجاد یکclass
به نام 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
، نیز یک فیلد متنی است که نام خانوادگی عضو را در خود دارد.
نام و نام خانوادگی هر دو تنظیم شده است تا حداکثر 255 کاراکتر داشته باشد.
پایگاه داده SQLite
هنگامی که پروژه جنگو را ایجاد کردیم، یک پایگاه داده SQLite خالی دریافت کردیم.
این در پوشه ریشه my_tennis_club
ایجاد شده است و نام فایل db.sqlite3
است.
به طور پیش فرض، تمام مدل های ایجاد شده در پروژه جنگو به صورت جداول در این پایگاه داده ایجاد می شوند.
Migrate
حالا وقتی یک Model را در فایل 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>
/migrations/
ذخیره می کند: mmy_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)),
],
),
]
توجه داشته باشید که جنگو یک فیلد id
برای جداول شما درج می کند که یک auto increment number
(عدد با افزایش خودکار) است (رکورد اول مقدار 1 را می گیرد، رکورد دوم 2 و غیره)، این رفتار پیش فرض جنگو است، می توانید با تعریف id
موردنظر خود، آن را لغو کنید.
جدول هنوز ایجاد نشده است، شما باید یک دستور دیگر را اجرا کنید، سپس جنگو یک دستور SQL را بر اساس محتوای فایل جدید در پوشه /migrations/
ایجاد و اجرا می کند.
دستورmigrate
را اجرا کنید:
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 را که از مهاجرت (migration) بالا اجرا شده است مشاهده کنید. تنها کاری که باید انجام دهید این است که این دستور را با شماره migration اجرا کنید:
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;