فرهاد که از این اوضاع نابسامان زندگی خسته شده است، تصمیم به مهاجرت میگیرد؛ ولی از آنجایی که به مقدار کافی، پول برای مهاجرت ندارد، تصمیم گرفت این مهاجرت را روی دادههای پروژهی خود پیادهسازی کند و آنها را از شر این زندگی نجات دهد.
ولی از آنجایی که به افسردگی ناشی از عدم مهاجرت مبتلا شده، به کمک شما برای انجام این کار نیاز دارد.
پروژه اولیه
پروژه اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
migration
├── account
│ ├── admin.py
│ ├── apps.py
│ ├── fixtures
│ │ └── users.json
│ ├── forms.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── blog
│ ├── admin.py
│ ├── apps.py
│ ├── fixtures
│ │ └── articles.json
│ ├── __init__.py
│ ├── > migrations <
│ │ ├── > 0001_initial.py <
│ │ └── __init__.py
│ ├── > models.py <
│ ├── tests.py
│ └── views.py
├── config
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── Pipfile
├── Pipfile.lock
├── requirements.txt
└── tests
├── __init__.py
└── testsample.py
پایگاهداده
اپلیکیشن blog
فقط شامل یک مدل به نام Article
است که این مدل شامل فیلدهای زیر میباشد:
%align_right_start%
-
author
: نام کاربری نویسندهی مقاله title
: عنوان مقالهcategory
: عنوان دستهبندی مقالهbody
: متن مقالهcreated
: زمان ایجاد مقاله (این فیلد به طور خودکار در زمان ایجاد مقاله جدید مقداردهی میشود.)
%align_end%
ترمیم ساختار داده
-
فیلد
author
باید به جای نام کاربری نویسنده به شئ User متناظر آن نویسنده اشاره کند (تضمین میشود مقدار فیلد برابر نام کاربری کاربر معتبر و موجود در پایگاه داده است.). همچنین در صورت حذف یک کاربر باید تمام مقالات نوشتهشده توسط آن کاربر حذف شود. -
فیلد
category
باید به شئ متناظر از مدل Category اشاره کند و در صورتی که آن شئ حذف شد باید برابر null قرار گیرد. -
برای این کار باید مدل Category را پیادهسازی کنید. این مدل باید شامل فیلدهای زیر باشد:
title
: عنوان دستهبندی (از نوع CharField و حداکثر طول ۵۰)status
: فعال بودن دسته بندی (از نوع BooleanField و مقدار پیشفرض True)
دقت کنید مقالات فعلی ممکن است دستهبندیهای یکسانی داشته باشند. در نتیجه باید به شئ یکسانی از مدل Category اشاره کنند. همچنین فیلد category
مقالات فعلی موجود در پایگاه داده بعد از اعمال مایگریشن باید برابر شئ از مدل Category شود که فیلد title
آن برابر مقدار فعلی فیلد category
باشد (برای درک بهتر این دو جمله به عکس زیر دقت کنید.).
- فیلد جدید
updated
که از نوع DateTimeField است و بعد از هر بار تغییر شئ (فراخوانی تابع save) برابر زمان بروزرسانی میشود و برای مقالات فعلی برابر فیلد created
است. - فیلد جدید
published
که از نوع DateTimeField است و به صورت پیشفرض برابر زمان حال (timezone.now
) است و برای مقالات فعلی برابر فیلد created
است. - فیلد جدید
status
که از نوع CharField است و میتواند برابر دو مقدارp
وd
باشد و به صورت پیشفرض برابرd
است و حتما باید مقدار داشته باشد. (p
به معنای منتشر شده یاpublish
وd
به معنای پیشنویس یاdraft
) و برای مقالات فعلی برابرp
است.
تست نمونه
در فایلهای اولیهای که دانلود کردید یکسری داده اولیه به عنوان نمونه قرار داده شده است. میتوانید قبل از فرستادن سوال در سایت، این تستها را ببینید تا با نحوه داوری ما آشنا شوید و از پاسخ خود اطمینان حاصل نمایید.
تستها را میتوانید با دستور زیر اجرا کنید:
python manage.py test
نکات
- شما تنها مجوز ایجاد تغییرات در فایلهای
blog/models.py
وblog/migrations
را دارید و تمامی تغییرات دیگر شما در فایلهای پروژه نادیده گرفته خواهند شد. - توجه کنید که نباید داخل فایل
blog/migrations/0001_initial.py
تغییری ایجاد کنید. - فراموش نکنید که میتوانید با مطالعهی
testsample.py
با روش تست کردن مدلها و مایگریشنها آشنا شوید.
نحوه ارسال
یک فایل ZIP حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل ZIP اهمیتی ندارد.
ارسال پاسخ برای این سؤال