如何让Django模型/表单字段支持含孟加拉语的全字符输入?
解决Django中CharField无法输入孟加拉语的问题
问题根源是Django默认的字符验证规则仅允许ASCII字母、数字和特定符号(@/./+/-/_),而孟加拉语属于Unicode非拉丁字符,会被拦截。以下是两种可行的解决方法:
方法一:在表单中覆盖字段验证
直接在UserInfoForm中重新定义username_in_bangla字段,移除默认限制验证,或指定允许Unicode字符的规则:
forms.py
from django import forms from .models import UserInfo class UserInfoForm(forms.ModelForm): # 仅保留长度限制,允许任意字符输入 username_in_bangla = forms.CharField(max_length=50) class Meta(): model = UserInfo fields = ('username_in_bangla', 'facebook_id', 'profile_pic')
如果需要精准控制(比如仅允许孟加拉语字符、数字和空格),可添加自定义正则验证:
from django.core.validators import RegexValidator class UserInfoForm(forms.ModelForm): username_in_bangla = forms.CharField( max_length=50, validators=[ RegexValidator( r'^[\u0980-\u09FF\s\d]+$', message="仅允许输入孟加拉语字符、数字和空格" ) ] ) class Meta(): model = UserInfo fields = ('username_in_bangla', 'facebook_id', 'profile_pic')
方法二:在模型字段中全局设置验证
若希望所有使用该模型的表单都生效,可直接修改UserInfo模型的字段定义,添加支持Unicode的验证器:
models.py
from django.db import models from django.contrib.auth.models import User from django.core.validators import UnicodeValidator class UserInfo(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) facebook_id = models.URLField(blank=True) username_in_bangla = models.CharField( max_length=50, default="গনি", # 允许任意Unicode字母、数字和下划线 validators=[UnicodeValidator(r'^\w+$')] ) profile_pic = models.ImageField(upload_to='profile_pics', blank=True)
若需专门针对孟加拉语优化,可使用孟加拉语的Unicode范围(U+0980至U+09FF)编写正则:
validators=[ RegexValidator( r'^[\u0980-\u09FF\s\d]+$', message="仅允许输入孟加拉语字符、数字和空格" ) ]
内容的提问来源于stack exchange,提问作者Osman Goni
相关产品推荐
相关产品推荐

