将django模型字符串字段提取为str,而不是unicode



django获取CharField字段作为unicode,而有时需要str。编写在字段上循环、检查类型以及如果是unicode则将其强制转换为str的代码既低效又乏味。

是否已经有一个功能可以处理它
如果没有,处理这件事最优雅的方式是什么?

您可以对模型进行子类化。CharField类并重写to_python方法:

from django.utils.encoding import smart_str
from django.db.models import CharField
class ByteStringField(CharField):
    def to_python(self, value):
        if isinstance(value, str) or value is None:
            return value
        return smart_str(value)

smart_str相当于CharFields中通常使用的smart_unicode函数的字节串。

编辑:正如Jonathan所说,如果你在使用South,记得要扩展South的内省规则。

最新更新