2013-07-25 54 views
1

django提取CharField字段作爲unicode,但有時需要str。編寫遍歷字段的代碼是非常低效和繁瑣的,檢查類型,並且它是否將其轉換爲str將django模型字符串字段作爲str代替unicode

是否已有可以處理它的功能?
如果不是最優雅的方式來處理這個問題?

+2

你能解釋爲什麼它很重要嗎? unicode字符串有什麼問題?有時str需要什麼? –

+0

@TomRose - 也許某處我檢查了'type(some_var)是str',unicode失敗,或許某些第三方低級別實現包有unicode問題... – Jonathan

+1

使用'isinstance(some_var,basestring)'來檢查所有字符串類型 –

回答

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功能的字節串的等效。

編輯:正如喬納森所說,如果你使用南方,請記住extend south's introspection rules

+1

.readthedocs.org/en/latest/customfields.html#expanding-introspection),對不對? – Jonathan

+0

你是對的,把它添加到我的答案。 – knbk

相關問題