在Django表单中将所有CharField表单字段输入转换为小写

mca*_*tle 3 python django python-2.7

我正在使用Django表单进行用户注册,用户可以在其中输入优惠券代码.我希望在优惠券代码字段中输入的所有字符都转换为小写.我尝试在save方法,自定义清理方法和自定义验证器中使用.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
Run Code Online (Sandbox Code Playgroud)

如上所述,我也尝试了一种清洁方法,但这也不起作用:

def clean_coupon(self):
    return self.cleaned_data['coupon'].lower()
Run Code Online (Sandbox Code Playgroud)

mca*_*tle 7

解决方案是创建一个自定义表单字段,它允许您覆盖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>")
    )
Run Code Online (Sandbox Code Playgroud)


elm*_*ylp 5

尝试在表单中使用带有小部件的CSS文本转换,如下所示:

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>")
        widget=TextInput(attrs={'style': 'text-transform:lowercase;'})
        )
Run Code Online (Sandbox Code Playgroud)