【问题标题】:fetch django model string fields as str instead of unicode获取 django 模型字符串字段作为 str 而不是 unicode
【发布时间】:2013-07-25 19:19:18
【问题描述】:

django 获取CharField 字段为unicode,而有时str 是必需的。编写循环遍历字段、检查类型并且如果是 unicode 将其强制转换为 str 的代码是低效且乏味的。

是否已经有可以处理它的功能?
如果不是,最优雅的处理方式是什么?

【问题讨论】:

  • 你能解释一下为什么它很重要吗? unicode 字符串有什么问题?有时 str 是由什么要求的?
  • @TomRose - 也许在某个地方我检查了 type(some_var) is str 的 unicode 失败,也许某些第 3 方低级实现包遇到了 unicode 问题...
  • 使用isinstance(some_var,basestring)检查所有类型的字符串
  • @TomRose - 如果我没记错的话,带有 python 绑定的quickfix 不能很好地处理 unicode

标签: python django string unicode


【解决方案1】:

您可以继承 models.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,请记住 extend south's introspection rules

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-06-25
  • 2022-11-11
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2013-12-03
  • 2011-06-20
相关资源
最近更新 更多