Django中的Unicode问题
我似乎对交易模型中的Django中的Unicode问题,django,unicode,unicode-string,Django,Unicode,Unicode String,我似乎对交易模型中的deal\u实例\u name有unicode问题 它说: 强制使用Unicode:需要字符串或缓冲区,已找到代理 此行出现异常: return smart_unicode(self.deal_type.deal_name) + _(u' - Set No.') + str(self.set) 如果我删除smart\u unicode(self.deal\u type.deal\u name),这行代码就行了,但为什么呢 当时在Django 1.1中,有人也遇到了同样的问
deal\u实例\u name
有unicode问题
它说:
强制使用Unicode:需要字符串或缓冲区,已找到代理
此行出现异常:
return smart_unicode(self.deal_type.deal_name) + _(u' - Set No.') + str(self.set)
如果我删除smart\u unicode(self.deal\u type.deal\u name)
,这行代码就行了,但为什么呢
当时在Django 1.1中,有人也遇到了同样的问题,我尝试了unicode()
以及新的smart\u unicode()
,但没有任何乐趣
请问我会错过什么
class Deal(models.Model):
def __init__(self, *args, **kwargs):
super(Deal, self).__init__(*args, **kwargs)
self.deal_instance_name = self.__unicode__()
deal_type = models.ForeignKey(DealType)
deal_instance_name = models.CharField(_(u'Deal Name'), max_length=100)
set = models.IntegerField(_(u'Set Number'))
def __unicode__(self):
return smart_unicode(self.deal_type.deal_name) + _(u' - Set No.') + smart_unicode(self.set)
class Meta:
verbose_name = _(u'Deal')
verbose_name_plural = _(u'Deals')
交易类型:
class DealType(models.Model):
deal_name = models.CharField(_(u'Deal Name'), max_length=40)
deal_description = models.TextField(_(u'Deal Description'), blank=True)
def __unicode__(self):
return smart_unicode(self.deal_name)
class Meta:
verbose_name = _(u'Deal Type')
verbose_name_plural = _(u'Deal Types')
实际上,
smart\u unicode
部分与您的问题无关:
from django.utils.translation import ugettext_lazy
stuff = u'abc' + ugettext_lazy(u'efg')
会引发完全相同的问题
这基本上是因为ugettext\u lazy(u'efg')
不会返回unicode
字符串,而是返回\uuuuuuu proxy\uuuu
,当您执行u'abc'+ugettext\u lazy(u'eg')
时,这将引发一个错误
你会遇到同样的问题:u'a'+1
您可以使用以下方法解决此问题:
from django.utils.translation import ugettext_lazy
stuff = u'abc {0}'.format(ugettext_lazy(u'efg'))
或者,您可以使用
unicode(ugettext\u lazy(u'efg'))
将ugettext\u lazy(u'efg')
强制到unicode
对象中。所以我这样做是为了返回\uuuunicode()\uuuuu
,对吗?@Kave是的,将智能uunicode(self.deal\u type.deal\u name)+(u'-Set No.)+smart\uunicode(self.Set)
替换为u'{0}{1}{2}'。格式(self deal.deal\u类型.deal\u名称,{u'-Set编号,'.self code>完美。我按照你的建议解决了,这也行吗?似乎正在工作:返回u“%s%s%s%”(self.deal\u type.deal\u name、u(u'-Set No.)、self.Set)
@Kave是的,它也能工作!(但您应该在较新的代码中使用str.format
))啊,谢谢您的更正。我从Django 1.0的旧书中学习了Django/Python: