فرهاد که به تازگی کتابفروشی آنلاین خود را باز کرده، تصمیم گرفته قابلیت تخفیف را به آن اضافه کند. ولی برای این کار نیاز به کمک شما دارد تا پروژه را طبق توضیحات ادامه تکمیل کنید.
پروژه اولیه
پروژه اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
Discount
├── accounts
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── authors
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── > books <
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   └── __init__.py
│   ├── > models.py <
│   ├── > serializers.py <
│   ├── tests.py
│   ├── urls.py
│   └── > views.py <
├── BookStore Quera.postman_collection.json
├── config
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── discounts
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   └── __init__.py
│   ├── models.py
│   ├── permissions.py
│   ├── serializers.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── fixtures
│   └── postman_sample_fixture.json
├── manage.py
├── requirements.txt
└── tests
    ├── __init__.py
    └── testsample.py
اپلیکشن discounts
اپلیکیشن discounts شامل مدلهای مختلفی میشود که کتاب میتواند براساس آن شامل تخفیف شود.  در ادامه شرایط اعمال آنها را برای کتابها مشخص شده است.
مدل CountryDiscount
CountryDiscountاگر کشور کاربر با کشور مشخص شده در این تخفیف یکسان بود، تمامی کتابهای موجود شامل درصد تخفیف مشخص شده میشوند.
مدل AuthorDiscount
AuthorDiscountتمامی کتابهایی که یکی از نویسندگان آن، نویسنده مشخص شده بود، شامل درصد تخفیف مشخص شده میشوند
مدل CategoryDiscount
CategoryDiscountتمامی کتابهایی که یکی از دستهبندیهای آن، دستهبندی مشخص شده بود، شامل درصد تخفیف مشخص شده میشوند.
مدل BookDiscount
BookDiscountدر این تخیفیف تنها کتاب مشخص شده، شامل درصد تخفیف مشخص شده میشود.
پیادهسازی مورد انتظار
اکیدا توصیه میشود پیش از حل این بخش سایر قسمتهای پروژه را مطالعه کنید.
تابع get_discount در books/models.py
get_discount در books/models.pyاین تابع باید بهترین تخفیفی که شامل کتاب مورد نظر (self) میشود. را انتخاب و قیمت بعد از اعمال شدن آن تخفیف را خروجی دهد.
نکات
* ممکن است چندین تخفیف مختلف را برای کتاب بتوان اعمال کرد. ولی فقط باید بهترین تخفیف بر روی آن، اعمال شود و در خروجی قیمت پس از اعمال تخفیف برگردانده شود. * دقت کنید ممکن است ریکوئست دریافتی از طرف کاربری که احراز هویت نشده فرستاده شود.
ویو BookViewSet در  books/views.py
BookViewSet در  books/views.pyشما باید با نوشتن سریالایزر یا سریالایزرهایی در books/serializers.py برای مدل Book و تکمیل ویو BookViewSet ریکوئستهایی مشابه نمونههای آورده شده در فایل BookStore Quera.postman_collection.json (این فایل را با اپلیکیشن postman باز کنید.) مدیریت کنید و پاسخ مشابهی دریافت کنید.
نکات
* از فیکسچر postman_sample_fixture.josn برای ایجاد مثالهای موجود در کالکشن پستمن استفاده شده، در صورتی که مایل باشید میتوانید این فیکسچر را load کرده و ریکوئستها را مجدد اجرا کنید.
نکات
- شما تنها مجوز ایجاد تغییرات در فایلهای books/views.py،books/models.pyوbooks/serializers.pyو ایجاد فایل جدیدی درbooks/را دارید و تمامی تغییرات دیگر شما در فایلهای پروژه نادیده گرفته خواهند شد.
- فراموش نکنید که میتوانید با مطالعهی testsample.pyبا روش تست کردن مدلها، فرمها و ادمینها آشنا شوید.
نحوه ارسال
یک فایل ZIP حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل ZIP اهمیتی ندارد.
ارسال پاسخ برای این سؤال