Models در جنگو

یک مدل یا 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;