from django import forms from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError from pingcap_sso.models import ( PointProduct, SecurityCode ) class ProductRedeemForm(forms.Form): product_id = forms.IntegerField(required=True) consignee_name = forms.CharField(required=True, strip=True, max_length=128) consignee_phone = forms.RegexField( required=True, regex=r'^1\d{10}$', error_messages={ 'invalid': _('invalid phone number'), 'required': _('phone number is required') } ) consignee_phone_code = forms.CharField(required=True, strip=True) consignee_addrss = forms.CharField(required=True, max_length=255) comment = forms.CharField(required=True) def __init__(self, *args, **kwargs): self.product = None super(ProductRedeemForm, self).__init__(*args, **kwargs) def clean_product_id(self): product_id = self.cleaned_data.get('product_id') if product_id: try: self.product = PointProduct.objects.get(pk=product_id) except Exception: raise ValidationError('没有找到该商品') return product_id def clean(self): if self.errors: return consignee_phone = self.cleaned_data.get('consignee_phone') consignee_phone_code = self.cleaned_data.get('consignee_phone_code') if consignee_phone and consignee_phone_code: if not SecurityCode.check_code(consignee_phone, consignee_phone_code): self.add_error('consignee_phone_code', '手机验证码错误') return self.cleaned_data