فروشگاه


کارها:🔗

  • نوشتن Manager
  • نوشتن ModelForm
  • نوشتن view محاسبه قیمت نهایی سفارش

می خواهیم یک سایت خرید اینترنتی محصولات مختلف بزنیم. در این سایت کاربران می توانند محصولات مختلف را مشاهده کرده و پس از انتخاب چند محصول فاکتور نهایی خرید خود را بینند.

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

پروژه اولیه🔗

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

shop
├── app
│   ├── migrations
│   │   ├── __init__.py
│   │   └── 0001_initial.py
|   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├── urls.py
│   └── views.py
|   └── forms.py
├── Shop
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── requirements.txt
Plain text

جزئیات🔗

در این سؤال تنها لازم است تغییراتی در app/views.py و app/models.py و app/forms.py ایجاد کنید.

در فایل models.py چهار مدل به شرح زیر وجود دارد:

۱. مدل ‍Category شامل فیلدهای زیر:

  • نام : name

۲. مدل Product شامل فیلدهای زیر:

  • نام محصول : name
  • دسته محصول :‌ category
  • توضیحات :‌ description
  • قیمت محصول :‌ price
  • موجودی انبار :‌ stock

۳. مدل Order شامل فیلدهای زیر:

  • ایمیل سفارش دهنده :‌ email
  • آدرس سفارش دهنده :‌ address

۴. مدل OrderItem شامل فیلدهای زیر:

  • سفارش مربوطه : order
  • محصول سفارش داده شده :‌ product
  • تعداد :‌ quantity

مواردی که باید انجام دهید:

۱.نوشتن منیجر🔗

یک منیجر جدید به نام available برای مدل Product بنویسید به طوری که فقط کالاهایی را که در انبار موجودند برگرداند.

توجه🔗

منیجر (objects) باید همانند سابق منیجر پیش فرض باقی بماند.

>>> Product.objects.all()
<QuerySet [<Product: pc>, <Product: mouse>, ...]>
>>> Product.available.all()
<QuerySet [<Product: pc>, ...]>
>>> Product.available.filter(price__gt=20)
<QuerySet [<Product: pc>, <Product: keyboard>, ...>
Plain text

۲.نوشتن فرم🔗

در این قسمت باید یک مدل فرم برای مدل Product بنویسید. برای این کار، فایل apps/forms.py دارای یک کلاس ProductForm است که باید آن را پیاده‌سازی کنید. کالاهایی که به وسیله‌ی این فرم ساخته می‌شوند باید ویژگی‌های زیر را دارا باشند:

  • قیمت کالا از 1000 نباید بیشتر باید. در صورت بیشتر بود این قیمت از 1000، باید یک ValidationError با پیام Product is too expensive پرتاب شود.
  • طول توضیحات کالا باید از 20 کاراکتر بیش‌تر باشد. در صورتی که این طول کم‌تر یا مساوی 20 باشد، باید یک ValidationError با پیام Product must have a good description پرتاب شود.

۳.نمایش قیمت نهایی یک order🔗

در این قسمت باید view محاسبه قیمت نهایی order را (checkout) طوری تغییر دهید که قیمت نهایی یک order مشخص (int:pk) را به صورت یک خروجی JSON به شکل زیر برگرداند.

{"total_price": "12.31"}
JSON
توجه🔗
  • این مقدار از نوع Decimal می باشد و باید تا دو رقم اعشار مقدار آن حفظ شود.

  • نیازی به تغییر stock پس از checkout نمی باشد و تضمین می شود که در تست ها تعداد کالای سفارش داده شده برابر و یا کمتر از موجودی کالا باشد.

  • اگر فاکتوری با ID مورد نظر موجود نبود خطای 404 برگردانید.

    نکات🔗

  • شما تنها مجاز به تغییر در app/views.py و app/models.py و app/forms.py هستید. اگر تغییری در سایر فایل‌ها ایجاد کنید، این تغییرات نادیده گرفته خواهد شد.

  • پس از اعمال تغییرات، کل پروژه را Zip کرده و ارسال کنید.

  • نام فایل Zip اهمیت ندارد.

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