You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:15:35