فرهاد که از این اوضاع نابسامان زندگی خسته شده است، تصمیم به مهاجرت میگیرد؛ ولی از آنجایی که به مقدار کافی، پول برای مهاجرت ندارد، تصمیم گرفت این مهاجرت را روی دادههای پروژهی خود پیادهسازی کند و آنها را از شر این زندگی نجات دهد.
ولی از آنجایی که به افسردگی ناشی از عدم مهاجرت مبتلا شده، به کمک شما برای انجام این کار نیاز دارد.
پروژه اولیه
پروژه اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
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 اهمیتی ندارد.
ارسال پاسخ برای این سؤال