我正在使用 Django 表单进行用户注册,用户可以在其中输入优惠券代码。我希望在优惠券代码字段中输入的所有字符都转换为小写。我试过在保存方法、自定义清理方法和自定义验证器中使用 .lower(),但我对这些方法并不满意。下面是我的代码。
class StripeSubscriptionSignupForm(forms.Form):
coupon = forms.CharField(max_length=30,
required=False,
validators=[validate_coupon],
label=mark_safe("<p class='signup_label'>Promo Code</p>")
def save(self, user):
try:
customer, created = Customer.get_or_create(user)
customer.update_card(self.cleaned_data["stripe_token"])
customer.subscribe(self.cleaned_data["plan"], self.cleaned_data["coupon"].lower())
except stripe.StripeError as e:
# handle error here
raise e
如前所述,我也尝试过一种清洁方法,但这也不起作用:
def clean_coupon(self):
return self.cleaned_data['coupon'].lower()
最佳答案
解决方案是创建一个自定义表单字段,它允许您覆盖 to_python 方法,然后可以修改表单字段中的原始值。
class CouponField(forms.CharField):
def to_python(self, value):
return value.lower()
class StripeSubscriptionSignupForm(forms.Form):
coupon = CouponField(max_length=30,
required=False,
validators=[validate_coupon],
label=mark_safe("<p class='signup_label'>Promo Code</p>")
)
关于python - 在 Django 表单中将所有 CharField 表单字段输入转换为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24313201/