django-ldapdb创建Model执行makemigrations报错,求开启字节模式方法
解决django-ldapdb执行makemigrations时的bytes mode TypeError问题
我之前在用django-ldapdb创建自定义LdapUser Model时,执行python manage.py makemigrations遇到了这个报错:
TypeError: All provided fields must be text when bytes mode is off; got 'CN=XXX,CN=Users,DC=domain,DC=com'
一开始完全摸不着头脑,不知道这个「字节模式(bytes mode)」在哪设置,后来折腾了一阵终于搞清楚了,分享下解决步骤:
1. 在settings.py中开启LDAP的bytes_mode
打开项目的settings.py,找到DATABASES配置里对应LDAP的数据库项,添加OPTIONS参数来开启字节模式:
DATABASES = { 'default': { # 你的默认数据库(比如MySQL/PostgreSQL)配置 }, 'ldap': { 'ENGINE': 'ldapdb.backends.ldap', 'NAME': 'ldap://你的LDAP服务器地址:389', 'USER': '你的LDAP管理员DN账号', 'PASSWORD': '管理员密码', # 添加这部分配置开启字节模式 'OPTIONS': { 'bytes_mode': True, }, } }
2. 为什么这个设置能解决问题?
django-ldapdb的bytes_mode默认是关闭状态(False),此时它会强制要求所有字段内容必须是纯文本类型。但咱们在LdapUser里设置的base_dn是LDAP特有的DN格式,内部处理时会被判定为不符合纯文本要求。开启bytes_mode=True后,库会允许以字节类型处理这类LDAP专属数据,自然就避开了这个类型检查错误。
3. 额外确认Model字段(可选)
检查你的LdapUser Model字段定义,确保像phone、mobile_phone这类用CharField映射LDAP属性的写法是正确的——你现在的代码写法没问题,不用调整。
内容的提问来源于stack exchange,提问作者InventoryGuy
相关产品推荐
相关产品推荐

