آموزش جنگو (Basic) : جلسه نوزده | نکاتی درباره مدل ها

در این جلسه به بررسی برخی نکات درباره مدل ها در جنگو خواهیم پرداخت . با ما همراه باشید .آموزش جنگو : جلسه نوزده | نکاتی درباره مدل هامدل ها : استفاده از مدل اپ دیگراین که بخواهید از مدل های اپ های دیگر استفاده کنید , اصلا ایرادی ندارد و فقط کافی است تا آنها را import کنید . برای مثال فرض کنید فیلد zip_code یک فیلد foriengkey باشد . این فیلد لازم است تا با مدل Zipcode از اپ geography رابطه داشته باشد . کد آن به صورت زیر خواهد بود (geography.models را import کنید و از آن استفاده کنید) :from django.db import models from geography.models import ZipCode class Restaurant(models.Model): # ... zip_code = models.ForeignKey( ZipCode, on_delete=models.SET_NULL, blank=True, null=True, )مدل ها : محدودیت های نام گذاری فیلد هاجنگو یک سری از محدودیت ها را برای نامگذاری فیلدها برای شما قرار داده است که باید آنها را رعایت کنید .1-نام فیلد های شما نمی توانند یکی از کلمات کلیدی یا دستورات پایتون باشند . در این صورت شما به سینتکس ارور برخورد خواهید کرد .class Example(models.Model): pass = models.IntegerField() # 'pass' is a reserved word!2-علامت underscore (_) نمیتواند در نام فیلد ,دو بار تکرار شود . این به دلیل نحوه کار کردن موتور دیتابیس جنگو است . به مثال زیر نگاه کنید .class Example(models.Model): foo__bar = models.IntegerField() # 'foo__bar' has two underscores!3-علامت underscore (_) نمیتواند در آخر نام فیلد شما قرار بگیرد . این نیز بخاطر نحوه کار کردن موتور های دیتابیس جنگو است . به مثال زیر نگاه کنید .class Example(models.Model): foo_ = models.IntegerField() # ‘foo_' has underscores at the end of it!با این حال میتوان این محدودیت ها را برطرف کرد زیرا ارور های شما از طرف پایتون و جنگو ایجاد می شوند و نه sql . شما فقط کافی است تا نام فیلد را خودتان به صورت دستی تعیین کنید و اجازه برداشتن نام فیلد از روی نام متغییر را به صورت اتوماتیک به جنگو ندهید . برای اینکار از ویژگی db_column استفاده می شود (در بخش های بعدی به آن اشاره خواهیم کرد).نکته :گرچه گفتیم کلمات رزرو شده پایتون برای نام فیلد ها مجاز نیستند ولی کلمات رزرو شده sql مانند where یا join یا select همگی برای استفاده در نام فیلد ها مجاز هستند . این بخاطر نحوه طراحی موتور دیتابیس جنگو است. (در واقع ارور شما بخاطر کلمات رزرو شده پایتون مربوط به مفسر خود پایتون است و از آن نمیتوان جلوگیری کرد )مدل ها : Meta optionsاین بخش بسیار میتواند به شما در ساخت یک مدل کمک کند . فرض کنید لازم دارید اطلاعات اضافه ای را درباره نحوه مرتب کردن رکورد ها یا اطلاعات دیگری که اضافه هستند را درون مدل خود ایجاد کنید . این کار به کمک meta otions انجام می شود . برای ایجاد آن کافیست یک زیرکلاس با نام meta در کلاس اصلی مدل خود ایجاد کنید .به مثالی که در صفحه بعد زده شده است نگاه کنید . در کلاس meta ما نحوه ی مرتب کردن رکورد ها را تعیین کرده ایم (درون لیست آن باید نام فیلدی باشد که مرتب سازی بر اساس آن است) . همچنین یک verbose_name هم برای آن تعیین کرده ایم .from django.db import models class Ox(models.Model): horn_length = models.IntegerField() class Meta: ordering =[&quothorn_length&quot] verbose_name_plural = &quotoxen&quotدر مقالات جنگو اینطور امده است : متا داده ها در یک مدل هر چیزی هستند که یک فیلد نمیتوانند باشند . برای مثال گزینه های مرتب کردن ,نام جدول دیتابیس و گزینه های دیگر .هیچکدام اجباری نیستند و میتوانند وجود نداشته باشند . گزینه های متاداده کارایی کلاس شما را افرایش می دهد و آن را کامل می کند .در ادامه این کتاب به معرفی همه ی متا داده ها خواهیم پرداخت .مدل ها :ویژگی های مدل و managerمهمترین ویژگی یک کلاس manager آن است . Manager به شما اجازه می دهد تا میان سرچ های دیتابیسی و مدل ها ارتباطی برقرار کنید و بتوانید از عملیات های دیتابیس های جنگو بهره ببرید . در واقع مدیر کلاس شما manager است . اگر شما manager خاصی را تعریف نکنید ,به صورت پیش فرض نام آن object خواهد بود . شما میتوانید از طریق خود کلاس به آن دسترسی پیدا کنید (هیچگاه از خود اشیا نمیتوان به manager دسترسی داشت ).برای مثال کد زیر را ببینید . در کد زیر manager و همه کاره ی کلاس example زیرکلاس objects است . (شما به وسیله این manager (objects) میتوانید به عملیات های filter و get و غیره دسترسی پیدا کنید )from django.db import models class example(models.Model): horn_length = models.IntegerField()و بصورت زیر میتوانید manager را فراخوانی کرده و از متدهای آن استفاده کنید :example.objectsدر این جلسه به بررسی برخی نکات مهم و معرفی برخی از بخش های مدل ها پرداختیم . این فقط یک آشنایی اولیه بود . در باقی مقالات آنها را تک به تک بررسی خواهیم کرد . در جلسه بعد به بررسی متد های مدل ها خواهیم پرداخت .