امروزه سایتهای سفارش آنلاین غذا بسار زیاد و همهگیر شدهاند، و مخصوصا شادی زیادی را برای ما برنامه نویسها فراهم کردهاند. حالا یکی از این سایتها تصمیم گرفته است برای بهتر کردن خدماتش و کمک به مشتریهای سایت در انتخاب غذا، بخش کامنت را به سایتش اضافه کند تا کاربرانی که غذایی را سفارش میدهند بتوانند نظر خودشان را راجع به غذا بگویند تا کاربران بعدی بتوانند بهتر و راحت تر غذای خودشان را انتخاب کنند.
این سایت سفارش آنلاین آنقدر سرش گرم تحویل غذاها و رسیدگی به سفارشهای مشتریهایش هست که وقت نمیکند این قابلیت را به سایتش اضافه کند و از شما میخواهد که در این کار کمکش کنید. پروژه اولیه را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/33476/) دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
```
.
├── manage.py
├── order_food
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── <mark class="yellow" title="این فایل را تغییر دهید"> > models.py < </mark>
│ ├── templates
│ │ └── order_food
│ │ └── <mark class="yellow" title="این فایل را تغییر دهید"> > menu.html < </mark>
│ └── <mark class="yellow" title="این فایل را تغییر دهید"> > views.py < </mark>
├── requirements.txt
├── restaurant
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── tests
└── testsample.py
```
در فایل `models.py` یک مدل به نام `Food` وجود دارد که شامل سه فیلد `name`، `price` و `description` است که به ترتیب نام، قیمت و توضیحات یک غذا را نشان میدهند.
همچنین یک فایل template نیز نوشته شده است که توسط view ی `menu_view` رندر شده و لیست همه غذاها را نشان میدهد. که این view با استفاده از آدرس (url) `/menu` صدا زده میشود.
شما باید در این صفحه بخش کامنتها را به شکل زیر اضافه کنید:
+ زیر هر غذا لیست همه کامنتهای آن غذا را با فرمت زیر نشان دهید:
+ برای هر کامنت نام کسی که کامنت را گذاشته است، تاریخ ثبت کامنت و متن کامنت باید چاپ شود.
+ برای مثال یک کامنت بدین شکل است. (فرمت تاریخ باید **دقیقا** به این شکل باشد. با گذاشتن تاریخ در template، تاریخ به همین شکل به نمایش در میآید.)
```
Aug. 21, 2017, 1:41 p.m. - amirhosein
khyli khosh maze bood. mamooon :D
```
*نام و تاریخ لازم نیست حتما نسبت به هم بدین شکل باشند، یعنی میتوانید نام و تاریخ را در سطرهای جدایی نمایش دهید یا ...*
+ اگر کاربر لاگین نباشد نباید بتواند کامنتی بگذارد و بنابراین هیچ فرمی برای گذاشتن کامنت نباید نمایش یابد و به جای آن **باید** عبارت `"Please log in to leave a comment."` را در این صفحه نمایش دهید.
+ اگر کاربر لاگین باشد باید به ازای هر یک غذا در انتهای کامنتها یک فرم برای گذاشتن کامنت در نظر بگیرید. یعنی اگر n غذا داریم، n فرم نیز باید در صفحه باشد.
+ این فرمها فقط یک فیلد برای نوشتن کامنت و یک دکمه برای ثبت کامنت باید داشته باشند و میتوانند چندین فیلد hidden دیگر نیز به اختیار خود داشته باشند.
+ نویسنده پیام user name کاربر فعلی است و تاریخ و ساعت لحظه سابمیت شدن فرم برای به عنوان تاریخ آن کامنت در نظر گرفته میشود.
+ وقتی یکی از فرمها سابمیت شد بعد از ثبت شدن کامنت باید دوباره صفحهی `/menu` به نمایش درآید و کامنت ثبت شده در صفحه باشد.
+ در این لحظه بعد از ثبت کامنت یک پیام مبنی بر موفقیت آمیز بودن ثبت کامنت با متن `"your comment successfully submitted."` باید در صفحه به نمایش در بیاید که اگر صفحه دوباره refresh شود پیام نیز از صفحه حذف میشود.
+ فیلد کامنت در این فرم باید اجباری باشد و کسی نتواند کامنت با متن خالی بگذارد.
### کتابخانهی استفاده شده
در این سوال شما برای انجام کارهای گفته شده ورژن 2.2.0 از کتابخانه `django-contrib-comments` را در اختیار دارید و باید از آن استفاده کنید. مستندات این کتابخانه در لینک زیر قابل مشاهده است:
[Django comments](http://django-contrib-comments.readthedocs.io/en/latest/)
## تست نمونه
در فایلهای اولیهای که دانلود کردید یکسری داده اولیه به عنوان نمونه قرار داده شده است. میتوانید قبل از فرستادن سوال در سایت، این تستها را ببینید تا با نحوه داوری ما آشنا شوید و از پاسخ خود اطمینان حاصل نمایید.
تستها را میتوانید با دستور زیر اجرا کنید:
```shell terminal terminal
python manage.py test
```
## نکات
+ شما تنها مجوز ایجاد تغییرات در فایلهای زیر را دارید و **تمامی تغییرات دیگر شما** در فایلهای پروژه **نادیده گرفته خواهند شد.**
+ فایل `order_food/models.py` (اجازه تغییر مدل فعلی را ندارید.)
+ فایل `order_food/views.py`
+ فایل `order_food/templates/order_food/menu.html`
+ فراموش نکنید که میتوانید با مطالعهی `testsample.py` با روش تست کردن مدلها آشنا شوید.
## آنچه باید آپلود کنید
این سوال از نوع سوالات چندفایلی است. برای حل سوال میتوانید پروژه را در قالب یک فایل *ZIP* که شامل کلیه فایلهای موجود در پروژه است، ارسال کنید.