بلاگ


در این سوال می‌خواهیم مدل‌های اصلی یک بلاگ را پیاده‌سازی کنیم.

پروژه اولیه🔗

پروژه اولیه را از این لینک دانلود کنید. ساختار این پروژه به شرح زیر است:

blog
├── manage.py
├── requirements.txt
├── blog
│   ├── admin.py
│   ├── apps.py
│   ├──  > models.py < 
│   ├── tests.py
│   ├── views.py
│   ├── __init__.py
│   └── migrations
│       └── __init__.py
├── Challenge
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py
│   └── __init__.py
└── tests
    ├── testsample.py
    └── __init__.py
Plain text

توضیحات🔗

در این سوال شما فقط با فایل models.py که در پوشه blog قرار دارد، کار خواهید کرد.
شما باید ۳ مدل (model) به این فایل اضافه کنید:

۱. مدل نویسنده (Author):

  • این مدل فقط دارای یک فیلد به نام name است که از جنس رشته با حداکثر طول ۵۰ کاراکتر است.

۲. مدل پستِ بلاگ (BlogPost):

  • این مدل دارای فیلدهای زیر است:
    • عنوان title: از جنس رشته با حداکثر طول ۲۵۰ کاراکتر است.
    • متن body: از جنس رشته با طول نامحدود است.
    • نویسنده author: که یک کلید خارجی به یک نویسنده است که نویسنده پست را مشخص می‌کند.
    • تاریخ ایجاد پست date_created: از نوع DateTimeField است که زمان دقیق ساخته شدن پست را نشان می‌دهد و توسط کاربر وارد نمی‌شود.

۳. مدل نظر (Comment):

  • این مدل دارای دو فیلد زیر است:
    • پست blog_post: این فیلد یک کلید خارجی به پستی است که این کامنت متعلق به آن است.
    • متن text: متن کامنت است که از نوع رشته با حداکثر طول ۵۰۰ کاراکتر می‌باشد.

توجه: این مدل‌ها باید به گونه‌ای نوشته شوند که اگر پستی پاک شد همه‌ی کامنت‌های مربوط به آن پست نیز پاک شود. همچنین اگر نویسنده‌ای پاک شد، همه پست‌های آن نویسنده به همراه کامنت‌هایش پاک شود.

تابع کپی: بعد از ساختن مدل‌های بالا یک تابع به نام ()copy به مدل BlogPost اضافه کنید. این تابع آرگومان ورودی ندارد و یک کپی از مدل موردنظر می‌گیرد. به این صورت که کل پست به همراه همه کامنت‌هایش را کاملاً کپی می‌کند. تاریخ پستِ کپی شده جدید، به تاریخ فعلی تغییر می‌کند. این تابع در نهایت id بلاگ پست جدید را باز‌ می‌گرداند.

برای مثال اگر تنها یک نویسنده به نام محمد و یک پست با تاریخ ۱۸ مهر به همراه ۳ کامنت در پایگاه داده وجود داشته باشد، بعد از کپی شدن پست در تاریخ ۲۰ مهر، هنوز یک نویسنده در پایگاه داده هست ولی تعداد پست‌ها ۲ و تعداد کامنت‌ها ۶ خواهد بود (هر پست ۳ کامنت مجزا) که تاریخ پست جدید ۲۰ مهر است.

تست نمونه🔗

در فایل‌های اولیه‌ای که دانلود کردید یکسری داده اولیه به عنوان نمونه قرار داده شده است. می‌توانید قبل از فرستادن سوال در سایت، این تست‌ها را ببینید تا با نحوه داوری ما آشنا شوید و از پاسخ خود اطمینان حاصل نمایید.

تست‌ها را می‌توانید با دستور زیر اجرا کنید:

extensionFromNameterminal
python manage.py test
Shell

نکات🔗

  • حتماً قبل از ارسال حتما دستور زیر را در ترمینال اجرا کنید.
    extensionFromNameterminal
    python manage.py makemigrations
    Shell
  • شما تنها مجاز به تغییر در blog/models.py هستید. اگر تغییری در سایر فایل‌ها ایجاد کنید، این تغییرات نادیده گرفته خواهد شد.
  • فراموش نکنید که می‌توانید با مطالعه‌ی testsample.py با روش تست کردن آشنا شوید.

نحوه ارسال🔗

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