from django import forms from orders.models import Order class CheckoutForm(forms.Form): delivery_method = forms.ChoiceField( choices=Order.DeliveryMethod.choices, initial=Order.DeliveryMethod.COURIER, widget=forms.RadioSelect, label="Способ доставки", ) region = forms.CharField(max_length=255, required=False, label="Регион") address = forms.CharField(max_length=512, required=False, label="Адрес") payment_method = forms.ChoiceField( choices=Order.PaymentMethod.choices, initial=Order.PaymentMethod.CARD, widget=forms.RadioSelect, label="Способ оплаты", ) customer_name = forms.CharField(max_length=255, label="ФИО") phone = forms.CharField(max_length=32, label="Телефон") email = forms.EmailField(label="E-mail") recipient_matches_customer = forms.BooleanField(required=False, initial=True) promo_code = forms.CharField(max_length=64, required=False, label="Промокод") terms_accepted = forms.BooleanField(required=True, label="Согласие с условиями") def clean_email(self): return self.cleaned_data["email"].strip().lower() def clean_promo_code(self): return self.cleaned_data["promo_code"].strip() def clean_customer_name(self): return self.cleaned_data["customer_name"].strip() def clean_phone(self): return self.cleaned_data["phone"].strip() def clean_region(self): return self.cleaned_data["region"].strip() def clean_address(self): return self.cleaned_data["address"].strip() def clean(self): cleaned_data = super().clean() delivery_method = cleaned_data.get("delivery_method") if delivery_method == Order.DeliveryMethod.COURIER: if not cleaned_data.get("region"): self.add_error("region", "Укажите регион доставки.") if not cleaned_data.get("address"): self.add_error("address", "Укажите адрес доставки.") return cleaned_data