django提取CharField
字段作爲unicode
,但有時需要str
。編寫遍歷字段的代碼是非常低效和繁瑣的,檢查類型,並且它是否將其轉換爲str
。將django模型字符串字段作爲str代替unicode
是否已有可以處理它的功能?
如果不是最優雅的方式來處理這個問題?
django提取CharField
字段作爲unicode
,但有時需要str
。編寫遍歷字段的代碼是非常低效和繁瑣的,檢查類型,並且它是否將其轉換爲str
。將django模型字符串字段作爲str代替unicode
是否已有可以處理它的功能?
如果不是最優雅的方式來處理這個問題?
可以子類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功能的字節串的等效。
編輯:正如喬納森所說,如果你使用南方,請記住extend south's introspection rules。
你能解釋爲什麼它很重要嗎? unicode字符串有什麼問題?有時str需要什麼? –
@TomRose - 也許某處我檢查了'type(some_var)是str',unicode失敗,或許某些第三方低級別實現包有unicode問題... – Jonathan
使用'isinstance(some_var,basestring)'來檢查所有字符串類型 –