بلاگ


در این سوال می‌خواهیم مدل های اصلی یک بلاگ را پیاده سازی کنیم. برای این کار شما باید یک پروژه بسازید و یک App به نام blog در آن ایجاد کنید. برای راحتی شما ما این پروژه خام را ساخته ایم و شما می‌توانید آن را به عنوان قالب از اینجا دانلود کنید و کد خود را در آن بنویسید.

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

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

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

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

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

۳. مدل نظر: Comment

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

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

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

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

فایل آپلودی

یک فایل zip. که درون آن یک پوشه blog وجود دارد و در این پوشه فقط یک فایل models.py قرار دارد. توجه کنید در صورتی که فایل‌های اضافی ارسال کنید، حذف خواهند شد.

<Your-zip-name>.zip
   └── blog
        └── models.py
Plain text