مشخصات مقاله
-
0
-
0.0
-
3581
-
0
-
0
آموزش ساخت ادمین سایت با Django
آموزش ساخت ادمین سایت با Django
حالا که مدلهایی را برای وب سایت LocalLibrary ایجاد کردیم، از سایت ادمین Django برای افزودن دادههای "واقعی" کتاب ها استفاده خواهیم کرد. اول، به شما نشان میدهیم که چگونه این مدلها را در سایت ادمین ثبت کنید، سپس به شما نشان خواهیم داد که چطور وارد سیستم شده و مقداری داده ایجاد کنید. در پایان مقاله، روش هایی را نشان خواهیم داد که با استفاده از آنها می توانید عملکرد سایت ادمین را بهبود بخشید.
پیش نیاز آموزش سایت ادمین در Django
آموزش استفاده از مدل ها در جنگو
هدف :
درک مزایا و محدودیتهای سایت ادمین Django، و استفاده از آن برای ایجاد رکوردهایی برای مدلهای خود.
بررسی
برنامه ادمین Django می تواند از مدلهای شما استفاده کند تا به طور خودکار بخشی از سایت را بسازد که شما می توانید از آن برای ایجاد، نمایش، به روز رسانی، و حذف رکوردها استفاده کنید. این مسئله می تواند بصورت چشمگیری باعث صرفه جویی در زمان در طول توسعه برنامه شود، تست مدلهای شما را ساده کرده و باعث می شود بدانید که آیا دادههای صحیحی را در اختیار دارید یا خیر. برنامه ادمین می تواند بسته به نوع وب سایت، برای مدیریت دادهها در مرحله تولید مفید باشد. پروژه Django آن را تنها برای مدیریت دادههای داخلی (مثلا فقط برای استفاده ادمین ها، یا افراد داخلی در سازمان شما) توصیه میکند، زیرا رویکرد مدل محور لزوما بهترین رابط ممکن برای همه کاربران نیست و جزئیات غیر ضروری زیادی در مورد این مدلها ارائه میکند.
زمانی که شما یک پروژه اسکلتون را ایجاد می کنید، تمام پیکربندی مورد نیاز برای گنجاندن برنامه ادمین در وب سایت شما به طور خودکار انجام می¬شود. در نتیجه، تمام کاری که باید انجام دهید تا مدلهای خود را به برنامه ادمین اضافه کنید، این است که آنها را ثبت کنید. در پایان این مقاله نیز بررسی می کنیم که چطور میتوان محدوده ادمین را طوری پیکربندی کرد تا دادههای مدل ما را بهتر به نمایش بگذارد.
پس از ثبت مدلها، نشان میدهیم که چگونه یک "superuser" جدید ایجاد کنیم، به سایت وارد شوید، و چند کتاب، نویسنده، نمونه کتاب و ژانرهای مختلف ایجاد کنید. اینها برای تست ویو و تمپلت هایی که ما در آموزش بعدی ایجاد خواهیم کرد، مفید خواهند بود.
ثبت مدلها
اول، admin.py را در برنامه کاتالوگ باز کنید (/locallibrary/catalog/admin.py). فعلا به این شکل است - توجه داشته باشید که django.contrib.admin را وارد میکند:
from django.contrib import admin
# Register your models here.
مدلها را با کپی متن زیر در انتهای فایل ثبت کنید. این کد مدلها را وارد میکند و سپس admin.site.register را فرامی خواند تا تا هر کدام از آنها را ثبت کند.
from .models import Author, Genre, Book, BookInstance
admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Genre)
admin.site.register(BookInstance)
اگر چالش ایجاد یک مدل برای نمایش زبان طبیعی یک کتاب را پذیرفتهاید (مقاله آموزش مدل ها را ببینید)، آن را نیز وارد و ثبت کنید!
این سادهترین روش ثبت یک یا چند مدل، در سایت است. سایت ادمین به شدت قابل ویرایش است، و در مورد راههای دیگر ثبت مدلهای شما بیشتر صحبت خواهیم کرد.
ایجاد یک superuser
برای ورود به سایت ادمین، ما به یک حساب کاربری با وضعیت Staff فعال نیاز داریم. به منظور مشاهده و ایجاد رکورد، ما نیاز داریم که این کاربر اجازه مدیریت تمام آبجکت ها را داشته باشد. شما می توانید با استفاده از manage.py، یک حساب کاربری "superuser" ایجاد کنید که دسترسی کامل به سایت و تمام مجوزهای مورد نیاز را داشته باشد.
فرمان زیر را، در همان دایرکتوری manage.py، فراخوانی کنید تا بتوانید superuser را ایجاد کنید. برای وارد کردن نام کاربری، نیاز به آدرس ایمیل و یک گذرواژه قوی دارد.
python3 manage.py createsuperuser
هنگامی که این فرمان کامل اجرا شود، یک superuser جدید به پایگاهداده اضافه خواهد شد. حالا سرور توسعه را مجددا راهاندازی کنید تا بتوانیم ورود به سیستم را آزمایش کنیم :
python3 manage.py runserver ورود به سیستم و استفاده از سایت
برای ورود به وب سایت، URL /admin (به عنوان مثال http://127.0.0.1:8000/admin) را باز کنید و نام کاربری گذرواژه جدید superuser تان را وارد کنید (شما به صفحه ورود به سیستم، و بعد از ورود جزئیات، مجددا به URL /admin هدایت خواهید شد).
این بخش از سایت همه مدلهای ما را نمایش میدهد، که توسط برنامه نصب شده گروهبندی شدهاند. شما میتوانید روی یک نام مدل کلیک کنید تا به صفحهای بروید که تمام رکوردهای مربوط به آن لیست شده، و میتوانید بر روی هر یک از سوابق کلیک کرده تا آنها را ویرایش کنید. همچنین می توانید به طور مستقیم روی لینک Add کنار هر مدل کلیک کنید تا یک رکورد از آن نوع ایجاد شود.

بر روی لینک Add در قسمت راست Books کلیک کرده تا یک کتاب جدید ایجاد کنید (این پیغامی مانند قسمت زیر نشان خواهد داد). توجه داشته باشید که چگونه عناوین هر فیلد، نوع ویجت مورد استفاده، و help_text (در صورت وجود) با مقادیری که در مدل مشخص کردهاید، مطابقت دارد.
مقادیر را برای فیلدها وارد کنید. شما میتوانید نویسندگان یا ژانرهای جدید را با فشار دادن دکمه + در کنار فیلدهای مربوطه (یا انتخاب مقادیر موجود از لیستها در صورتی که قبلا آنها را ایجاد کردهاید) ایجاد کنید. زمانی که این کار را کردید، میتوانید دکمه SAVE، Save and add another، یا Save and continue editing را برای ذخیره رکورد فشار دهید.

در اینجا از شما میخواهیم کمی زمان صرف اضافه کردن چند کتاب، نویسنده، و ژانر (مثلا فانتزی) به برنامه خود کنید. دقت کنید که هر نویسنده و ژانر شامل چند کتاب مختلف باشد (این باعث میشود که ویوی لیست و جزئیات شما جالبتر به نظر بیاید، زمانی که بعدها آنها را در سلسله مقالات پیاده سازی میکنیم).
زمانی که تمام کتابها را به پایان رساندید، روی لینک Home در بوکمارک بالا کلیک کنید تا به صفحه ادمین اصلی بازگردانده شوید. سپس روی لینک Books کلیک کنید تا لیست فعلی کتابها را نمایش دهد (یا بر یکی دیگر از لینکها، تا لیست مدل های دیگر را ببینید). حالا که چند کتاب اضافه کردید، لیست شما ممکن است شبیه عکس صفحه زیر باشد. عنوان هر کتاب نمایش داده میشود؛ این مقدار بازگشتی در __str__() مدل Books است که در آخرین مقاله مشخص کردیم.

با استفاده از این لیست می توانید ابتدا کتاب مورد نظر خود را با انتخاب چک باکس کنار کتاب ها انتخاب کرده و سپس با انتخاب عملیات delete… از لیست کرکرهای Action و فشار دادن دکمه Go، آن کتاب را حذف کنید. همچنین می توانید با فشردن دکمه ADD BOOK، کتابهای جدید را اضافه کنید.
شما میتوانید با انتخاب نام یک کتاب در لینک، آن را ویرایش کنید. صفحه ویرایش برای یک کتاب، که در زیر نشانداده شدهاست، تقریبا شبیه صفحه "Add" است. تفاوت اصلی در عنوان صفحه (Change book) و اضافه شدن دکمه های Delete، HISTORY و VIEW ON SITE است (دکمه آخر به این دلیل است که ما روش get_absolute_url() را در مدل خود تعریف کردیم).

حالا به صفحه Home بازگردید (با استفاده از لینک Home در مسیر breadcrumb) و سپس لیست-های Author و Genre ببینید – اگرچه از زمان شروع ایجاد کتاب های جدید تا به الان، چندین کتاب اضافه و ایجاد کرده اید؛ اما محدودیتی وجود ندارد و می توانید کتاب های بیشتری اضافه کنید.
از آنجا که نمونه کتاب ها از کتاب ساخته نمی شوند، پس نمونه کتابی هم وجود ندارد (اگرچه شما میتوانید یک Book را از یک BookInstance ایجاد کنید - این ماهیت فیلد ForeignKey است). به صفحه Home بازگردید و دکمه Add مربوطه را فشار دهید تا صفحه Add book instance مانند زیر باز شود. به Id بزرگ و منحصر به فرد جهانی دقت کنید، که می تواند برای شناسایی جداگانه یک کپی از یک کتاب در کتابخانه به کار گرفته شود.

تعدادی از این رکوردها را برای هر کدام از کتاب هایتان ایجاد کنید. وضعیت را برای چند رکورد به صورت Available و برای برخی دیگر به صورت On loan تنظیم کنید. اگر وضعیت Available نباشد، پس یک گزینه برای تاریخ Due back تعیین کنید.
تا به اینجا چگونگی استفاده از سایت ادمین را مورد بررسی قرار دادیم. علاوه بر این، رکوردهای مربوط به Book، BookInstance، Genre، و Author را ایجاد کردیم که میتوانیم در زمان ساخت ویوها و تمپلت های خود از آنها استفاده کنیم.
پیکربندی پیشرفته
Django عملیات مناسبی برای ایجاد یک سایت ادمین پایه با استفاده از اطلاعات مدلهای ثبت شده انجام میدهد:
هر مدل لیستی از رکوردهای واحد دارد، که با رشته ایجاد شده توسط متود __str__() مدل شناساییشده، و به جزئیات ویوها/فرم ها برای ویرایش مرتبط است. به طور پیش فرض، این ویو یک اکشن منو در بالا دارد که می توانید از آن برای انجام عملیات حذف چندگانه رکوردها استفاده کنید.
فرم های جزئیات رکورد مدل برای ویرایش و اضافه کردن رکوردها شامل تمام فیلدهایی از مدل می شود که به صورت عمودی در ترتیب اعلامی خود قرار داده میشوند.
شما میتوانید این رابط را طوری طراحی کنید که استفاده از آن آسان تر هم شود. برخی از مواردی که می توانید انجام دهید عبارتند از :
• List views
اضافه کردن فیلدها/اطلاعات اضافی نمایشدادهشده برای هر رکورد.
اضافه کردن فیلتر برای انتخاب اینکه کدام رکوردها بر اساس تاریخ یا دیگر موارد انتخابی لیست می شوند (به عنوان مثال وضعیت موجودی کتاب).
اضافه کردن گزینه های دیگر به منو عملیات در List views و انتخاب اینکه این منو در کجا فرم نمایش داده شود.
• Detail views
-
انتخاب فیلدهای مورد نظر برای نمایش یا حذف بر اساس ترتیب، دستهبندی، قابل ویرایش بودن آنها، ویجت استفادهشده، جهت گیری و غیره.
-
اضافه کردن فیلدهای مرتبط به یک رکورد برای اجازه دادن به ویرایش داخلی (به عنوان مثال، اضافه کردن قابلیت افزودن و ویرایش رکوردهای کتاب در حالی که شما رکورد نویسنده آنها را ایجاد میکنید).
در این بخش به بررسی تغییراتی میپردازیم که می توانند باعث بهبود رابط کاربری برای LocalLibrary شوند، از جمله این تغییرات می توان به مواردی همچون اضافه کردن اطلاعات بیشتر به لیست مدلهای Book و Author، و بهبود آرایش Edit Views آنها اشاره کرد. از آنجا که هر یک از مدل های Language و Genre، تنها یک فیلد دارند و ایجاد تغییر در ظاهر آنها مزیت خاصی بهمراه ندارد، پس هیچ گونه تغییری در این مدل ها اعمال نمی کنیم.
ثبت یک کلاس ModelAdmin
برای تغییر در چگونگی نمایش یک مدل در اینترفیس ادمین، شما یک کلاس ModelAdmin را تعریف میکنید (که چیدمان را توصیف میکند) و آن را با مدل ثبت میکنید.
بیایید با مدل Author شروع کنیم. admin.py را در برنامه کاتالوگ (/locallibrary/catalog/admin.py) باز کنید. ثبت اصلی خود را (با پیشوند #) برای مدل Author بنویسید:
# admin.site.register(Author)
حالا یک AuthorAdmin و ثبت جدیدی به صورت زیر اضافه کنید
# Define the admin class
class AuthorAdmin(admin.ModelAdmin):
pass
# Register the admin class with the associated model
admin.site.register(Author, AuthorAdmin) حال کلاسهای ModelAdmin برای Book و BookInstance را اضافه میکنیم. اما نیاز است که ثبت اصلی را مجدد بنویسیم :
# admin.site.register(Book)
# admin.site.register(BookInstance) اکنون برای ایجاد و ثبت مدلهای جدید برای این بخش، ما از دکوراتور @register برای ثبت مدلها استفاده میکنیم (این دقیقا همان کاری است که سینتکس admin.site.register() انجام می دهد):
# Register the Admin classes for Book using the decorator
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
pass
# Register the Admin classes for BookInstance using the decorator
@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
pass
از آنجا که تمامی کلاس های ادمین خالی هستند (pass را ببینید)، رفتار ادمین بدون تغییر باقی خواهد ماند! حال میتوانیم این کلاس ها را برای تعریف رفتار ادمین برای هر مدل خاص بسط دهیم.
پیکربندی List Views
تا به اینجا LocalLibrary تمام نویسندگان را با استفاده از نام آبجکت که از متود __str__() تولید شده، لیست میکند. این برای زمانی خوب است که شما تنها چند نویسنده داشته باشید، اما زمانی که تعداد نویسنده ها زیاد باشد، ممکن است در پایان با موارد تکراری زیادی مواجه شوید. برای متمایز کردن آنها، یا فقط به این دلیل که میخواهید اطلاعات جالب تری در مورد هر نویسنده ارائه دهید، میتوانید از list_Display برای اضافه کردن فیلدهای اضافی به ویو استفاده کنید.
کلاس AuthorAdmin را با کد زیر تعویض کنید. همانطور که نشانداده شدهاست نام فیلدهایی که باید در این لیست نمایش داده شوند به ترتیب مورد نیاز بودن آنها، در یک tuple اعلام میشوند (اینها نامهایی هستند که مشابه با نام های مدل اصلی شما هستند).
class AuthorAdmin(admin.ModelAdmin):
list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death')
حال در وب سایت خود به سراغ لیست نویسنده ها بروید. در این حالت، فیلد بالا باید به صورت زیر نمایش داده شود :

برای مدل Book، author و genre را نیز نمایش خواهیم داد. Author یک فیلد Foreignkey (یک به چند) است، و بنابراین توسط مقدار __str__() برای رکورد مربوطه نمایش داده خواهد شد. کلاس BookAdmin را با نسخه زیر جایگزین کنید.
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'display_genre')
متاسفانه نمیتوان فیلد genre را به طور مستقیم در list_display مشخص کرد زیرا یک فیلد با رابطه ManyToMany است (Django از این امر جلوگیری میکند، زیرا هزینه دسترسی به یک پایگاهداده بزرگ در میان خواهد بود). در عوض ما یک تابع display_genre را برای بدست آوردن اطلاعات به صورت یک رشته تعریف میکنیم (این تابعی است که ما در بالا نام بردیم؛ و آن را در ادامه تعریف خواهیم کرد).
به دلیل "هزینه" عملیات پایگاه داده، تنظیم genre ممکن است ایده خوبی نباشد. چرا که فراخوانی توابع در مدلهای شما میتواند به دلایل دیگری بسیار مفید باشد - به عنوان مثال اضافه کردن یک لینک Delete در کنار هر آیتم در لیست.
کد زیر را به مدلBook خود اضافه کنید (models.py). این کد یک رشته از سه مقدار اول در فیلدgenre را در صورت جود می سازد و یک short_description نیز ایجاد میکند که میتواند در سایت ادمین برای این روش مورد استفاده قرار گیرد.
def display_genre(self):
"""Create a string for the Genre. This is required to display genre in Admin."""
return ', '.join(genre.name for genre in self.genre.all()[:3])
display_genre.short_description = 'Genre'
بعد از ذخیره مدل و به روز رسانی ادمین، وب سایت خود را باز کرده و به صفحه لیست Books بروید؛ شما باید لیست کتابی مانند زیر ببینید:
مدل Genre (و مدل Language، اگر تعریف کرده باشید) هر دو یک فیلد واحد دارند، بنابراین هیچ منفعتی در ایجاد یک مدل اضافی برای آنها جهت نمایش فیلدهای اضافی وجود ندارد.
به روز رسانی لیست مدل BookInstance برای نشان دادن وضعیت و تاریخ بازگشت مورد انتظار، مناسب است. ما این مورد را به صورت یک چالش در پایان این مقاله اضافه کردیم!
اضافه کردن فیلترهای لیست
زمانی که آیتمهای زیادی در یک لیست وجود دارند، فیلتر کردن آیتم های موجود برای نمایش داده شدن، میتواند مفید باشد. این کار با لیست کردن فیلدها در صفت list_filter انجام میشود. کلاس BookInstanceAdmin فعلی خود را با کد زیر جایگزین کنید.
class BookInstanceAdmin(admin.ModelAdmin):
list_filter = ('status', 'due_back')
ویوی لیستی شامل یک فیلتر باکس در سمت راست خواهد بود. توجه داشته باشید که چگونه میتوانید تاریخها و وضعیت را برای فیلتر کردن مقادیر انتخاب کنید:

مرتب سازی چیدمان ویوی جزئیات
به طور پیش فرض، ویوی جزئیات تمام فیلدها را به صورت عمودی و به ترتیب اعلام آنها در مدل، نمایش می دهد. شما می توانید ترتیب نمایش، فیلدهای مورد نظر برای نمایش، بخش های مورد استفاده برای سازمان دهی اطلاعات، افقی یا عمودی نمایش دادن فیلدها و حتی ویجت های مورد نظر برای استفاده در فرم های ادمین را تغییر دهید.
مدلهای LocalLibrary نسبتا ساده هستند بنابراین نیاز چندانی به تغییر آرایش وجود ندارد؛ با این حال ما تغییراتی را انجام خواهیم داد تا به شما چگونگی آن را نشان دهیم.
کنترل اینکه کدام فیلدها نمایش داده و مرتب شوند
کلاس AuthorAdmin خود را به روز رسانی کنید تا خط fields اضافه شود، همانطور که در زیر نشانداده شدهاست:
class AuthorAdmin(admin.ModelAdmin):
list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death')
fields = ['first_name', 'last_name', ('date_of_birth', 'date_of_death')]
صفت fields، لیستی از آن فیلدهایی که قرار است در فرم، نمایش داده شوند را به ترتیب ارائه می کند. فیلدها به صورت پیش فرض به شکل عمودی نمایش داده میشوند، اما اگر شما آنها را در یک tuple دسته بندی کنید، به شکل افقی نمایش داده می¬شوند (همانطور که در فیلد "date" در بالا نشانداده شد).
در وب سایت، به ویو جزئیات نویسنده مراجعه کنید – حالا باید به صورت زیر نشان داده شود:

شما همچنین می توانید از صفت exclude برای اعلام لیستی از صفات جهت حذف از فرم استفاده کنید (تمام صفات دیگر در مدل نمایش داده خواهند شد).
تقسیم بندی ویوی جزئیات
شما میتوانید با استفاده از خصوصیت fieldsets، "sections" را به گروه مریوط به اطلاعات مدل در فرم جزئیات اضافه کنید.
در مدل BookInstance ما اطلاعات مربوط به این که کتاب چیست (به عنوان مثال، name، imprint، و id) و زمانی که در دسترس خواهد بود (status، due_back) را داشتیم. میتوانیم این بخش های مختلف را با اضافه کردن متن به صورت بولد به کلاس BookInstanceAdmin اضافه کنیم.
@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
list_filter = ('status', 'due_back')
fieldsets = (
(None, {
'fields': ('book', 'imprint', 'id')
}),
('Availability', {
'fields': ('status', 'due_back')
}),
)
هر بخش عنوان خود و همینطور یک تاپل مربوطه از فیلدها در یک دیکشنری را دارد (یا None، اگر عنوان نمیخواهید). شرح فرمت آن دشوار است، اما اگر به تکه کد بالا نگاهی کنید، درک آن نسبتا آسان است.
حال به ویوی نمونه کتاب در وب سایت خود بروید؛ فرم باید به صورت زیر نشان داده شود:

ویرایش اینلاین رکوردهای مربوطه
گاهی اوقات منطقی به نظر می رسد که امکان افزودن رکوردهای مربوطه در هر زمان وجود داشته باشد. برای مثال، ممکن است منطقی باشد که هم اطلاعات کتاب و هم اطلاعات مربوط به نسخههای خاص آن را در یک صفحه جزئیات داشته باشیم.
شما میتوانید این کار را با اعلام inlines، از نوع TabularInline (چیدمان افقی) یا StackedInline (چیدمان عمودی، درست مانند چیدمان پیش¬فرض مدل) انجام دهید. بخشی از کد زیر که به شکل bold نوشته شده است را در مجاورت BookAdmin خود قرار دهید تا بتوانید اطلاعات BookInstance را بصورت inline به جزئیات Book اضافه کنید.
class BooksInstanceInline(admin.TabularInline):
model = BookInstance
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'display_genre')
inlines = [BooksInstanceInline]
حال به ویوی یک Book در وب سایت خود بروید – حالا در پایین باید نمونههای کتاب مربوط به این کتاب را ببینید (بلافاصله زیر فیلدهای ژانر کتاب):

در این کارکرد محدودیتهای دردناکی وجود دارد! در اسکرین شات بالا سه نمونه کتاب و سه متغیر برای نمونههای کتاب جدید وجود دارد (که بسیار شبیه هم هستند). بهتر است نمونههای کتاب اضافی را به طور پیشفرض نداشته باشیم و آنها را با لینک Add another Book instance اضافه کنیم، یا بتوانیم BookInstance را به صورت لینکهای غیرقابل خواندن از اینجا لیست کنیم. گزینه اول را می توان با تنظیم صفت extra در مدل BooksInstanceInline انجام داد، خودتان آن را امتحان کنید.
در این مورد تمام کاری که کردیم اعلام کلاس جدولی هم خط بود، که تمامی فیلدها را از مدل inlined اضافه می کرد. شما میتوانید انواع اطلاعات اضافی از جمله فیلدهای نمایش داده شده، ترتیب آنها، اینکه آنها فقط خواندنی باشند یا نه و غیره را برای چیدمان مشخص کنید. (به TabularInline برای اطلاعات بیشتر مراجعه کنید).
خود را به چالش بکشید
ما در این بخش خیلی چیزها را یاد گرفتهایم، بنابراین زمان آن رسیده که شما چند چیز را امتحان کنید.
برای ویوی لیستی BookInstance، کدی را اضافه کنید تا کتاب، وضعیت، زمان برگشت، و شناسه (چیزی غیر از متن پیش فرض __str__()) را نمایش دهد.
یک لیست هم خط از آیتمهای Book را به ویوی جزئیات author با استفاده از همان روشی که برای Book/BookInstance انجام دادیم، اضافه کنید.
خلاصه
حالا یاد گرفتید که چگونه سایت ادمین را به ساده¬ترین روش و به صورت بهبود یافته راهاندازی کنید، چطور یک superuser ایجاد کنید، و چگونه سایت ادمین را هدایت کنید و ویوی آن را تغییر داده، رکوردها را حذف، و به روز رسانی کنید. در طول مسیر شما تعدادی Book، BookInstances، Genres، و Authors ایجاد کردهاید که زمانی که ویو و تمپلت های خود را ایجاد کردیم، قادر به لیست کردن و نمایش آنها خواهیم بود.