احتمالا شما هم تا به حال از یک فروشگاه آنلاین خرید کردهاید. در هر فروشگاه آنلاین یک سبد خرید یا cart
وجود دارد که محصولات انتخاب شده در آن نمایش داده میشوند و برای هر محصول میتوان بعضی خصوصیات آن محصول مانند تعداد، رنگ و ... را تغییر داد.
حال ما میخواهیم یک فروشگاه آنلاین بنویسیم و قسمتی از پروژه را نیز نوشتهایم و از شما میخواهیم در نوشتن فرمِ سبد خرید به ما کمک کنید. پروژهی فعلی را میتوانید از این لینک دانلود کنید.
همانطور که میبینید، در پروژه یک app
به نام shop
و در آن دو مدل Color
و Product
وجود دارد.
در فایل forms.py
یک فرم با نام CartForm
وجود دارد که شما باید این کلاس را به شکل زیر تکمیل کنید.
توجه: در ورودی kwargs
تابع __init__
یک کلید به نام items
وجود دارد که لیست product
ها را نشان میدهد.
شما باید به ازای هر product
ای که به فرم شما پاس داده میشود، دو فیلد تعداد و رنگ را به شکل زیر قرار دهید:
IntegerField
باشد و نام آن number_<product.id>
باشد که در آن <product.id> آیدی آن محصول است. برای این فیلد، باید مقدار پیشفرض ۱ را در نظر بگیرید. و label
آن هم باید نام محصول باشد.ChoiceField
میباشد و نام آن color_<product.id>
است که در آن <product.id> آیدی آن محصول است. این فیلد لیستی از رنگهای موجود برای محصول خاص را نشان میدهد. مقدار label
این فیلد هم باید 'color'
باشد. تضمین میشود که هیچ محصولی بدون رنگ نیست.موارد خواسته شده باید در تابع __init__
به self.fields
اضافه شوند. همچنین به ازای هر دو مورد بالا مقدار required
باید False
باشد.
توجه کنید که هر دو این فیلدها در نهایت حتما باید مقدار داشته باشند بدین معنی که اگر در request.POST
داده برای یک فیلد فرستاده نشد، باید خودتان برایش مقداری قرار دهید. برای فیلدهای "تعداد" مقدار ۱ و برای فیلدهای "رنگ"، کوچکترین رنگ موجود در لیست رنگهای آن کالا (از نظر الفبایی) باید قرار بگیرد.
حال یک درخواست POST با داده های خالی {}
ارسال میشود. در این صورت باید بعد از ایجاد فرم و صدا شدن تابع ()is_valid، متغییر cleaned_data به شکل زیر باشد:
زیرا رنگ blue
از نظر الفبایی از دو رنگ دیگر کوچکتر است.
در فایل views.py
یک تابع به نام make_json
قرار دارد که cleand_data فرم مورد نظر را به شکل json با فرمت خاص برمیگرداند. نیازی نیست شما در این تابع تغییری ایجاد کنید یا از آن استفاده کنید.
فایل آپلودی
یک فایل zip. که درون آن یک پوشه shop
وجود دارد که شامل یک فایل forms.py
است. توجه کنید در صورتی که فایلهای اضافی ارسال کنید، حذف خواهند شد.