مهاجرت!


فرهاد که از این اوضاع نابسامان زندگی خسته شده است، تصمیم به مهاجرت می‌گیرد؛ ولی از آن‌جایی که به مقدار کافی، پول برای مهاجرت ندارد، تصمیم گرفت این مهاجرت را روی داده‌های پروژه‌ی خود پیاده‌سازی کند و آن‌ها را از شر این زندگی نجات دهد.

ولی از آن‌جایی که به افسردگی ناشی از عدم مهاجرت مبتلا شده، به کمک شما برای انجام این کار نیاز دارد.

پروژه اولیه🔗

پروژه اولیه را از این لینک دانلود کنید. ساختار فایل‌های این پروژه به صورت زیر است:

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
Plain text

پایگاه‌داده🔗

اپلیکیشن blog فقط شامل یک مدل به نام Article است که این مدل شامل فیلدهای زیر می‌باشد:

  • ‍‍author : نام کاربری نویسنده‌ی مقاله
  • title : عنوان مقاله
  • ‏category : عنوان دسته‌بندی مقاله
  • ‏body : متن مقاله
  • ‏created : زمان ایجاد مقاله (این فیلد به طور خودکار در زمان ایجاد مقاله جدید مقداردهی می‌شود.)

ترمیم ساختار داده🔗

  • فیلد author باید به جای نام کاربری نویسنده به شئ User متناظر آن نویسنده اشاره کند (تضمین می‌شود مقدار فیلد برابر نام کاربری کاربر معتبر و موجود در پایگاه داده است.). همچنین در صورت حذف یک کاربر باید تمام مقالات نوشته‌شده توسط آن کاربر حذف شود.

  • فیلد category باید به شئ متناظر از مدل Category اشاره کند و در صورتی که آن شئ حذف شد باید برابر null قرار گیرد.

  • برای این کار باید مدل Category را پیاده‌سازی کنید. این مدل باید شامل فیلدهای زیر باشد:

    • title: عنوان دسته‌بندی (از نوع CharField و حداکثر طول ۵۰)
    • status: فعال بودن دسته بندی (از نوع BooleanField و مقدار پیش‌فرض True)

دقت کنید مقالات فعلی ممکن است دسته‌بندی‌های یکسانی داشته باشند. در نتیجه باید به شئ یکسانی از مدل Category اشاره کنند. همچنین فیلد category مقالات فعلی موجود در پایگاه داده بعد از اعمال مایگریشن باید برابر شئ از مدل Category شود که فیلد ‍title آن برابر مقدار فعلی فیلد category باشد (برای درک بهتر این دو جمله به عکس زیر دقت کنید.).

Migration

  • فیلد جدید ‍updated که از نوع DateTimeField است و بعد از هر بار تغییر شئ (فراخوانی تابع save) برابر زمان بروزرسانی می‌شود و برای مقالات فعلی برابر فیلد ‍‍created است.
  • فیلد جدید published که از نوع DateTimeField است و به صورت پیش‌فرض برابر زمان حال (timezone.now) است و برای مقالات فعلی برابر فیلد ‍‍created است.
  • فیلد جدید ‍status که از نوع CharField است و می‌تواند برابر دو مقدار p و d باشد و به صورت پیش‌فرض برابر d است و حتما باید مقدار داشته باشد. (‍p به معنای منتشر شده یا publish و d به معنای پیش‌نویس یا draft) و برای مقالات فعلی برابر p است.

نکات🔗

  • شما تنها مجوز ایجاد تغییرات در فایل‌های blog/models.py‍ و blog/migrations را دارید و تمامی تغییرات دیگر شما در فایل‌های پروژه نادیده گرفته خواهند شد.
  • توجه کنید که نباید داخل فایل blog/migrations/0001_initial.py تغییری ایجاد کنید.
  • فراموش نکنید که می‌توانید با مطالعه‌ی testsample.py با روش تست کردن مدل‌ها و مایگریشن‌ها آشنا شوید.

نحوه ارسال🔗

یک فایل ZIP حاوی همه‌ی فایل‌های پروژه، آپلود کنید. نام فایل ZIP اهمیتی ندارد.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.