0

deal_instance_nameDeal モデルの に Unicode の問題があるようです。

それは言います:

coercing to Unicode: need string or buffer, __proxy__ found

例外は次の行で発生します。

return smart_unicode(self.deal_type.deal_name) + _(u' - Set No.')  + str(self.set)

削除すると行が機能smart_unicode(self.deal_type.deal_name)しますが、なぜですか?

当時の Django 1.1 では、誰かがStackoverflowで同じ問題を抱えていunicode()ましたsmart_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')
4

1 に答える 1

2

実際、そのsmart_unicode部分はあなたの問題とは何の関係もありません:

from django.utils.translation import ugettext_lazy
stuff = u'abc' + ugettext_lazy(u'efg')

まったく同じ問題が発生します。

これは基本的に、 が文字列でugettext_lazy(u'efg')はなく を返し、を実行するとエラーが発生するためです。unicode__proxy__u'abc' + ugettext_lazy(u'eg')

次の場合とまったく同じ問題が発生しますu'a' + 1

この問題は、次を使用して解決できます。

from django.utils.translation import ugettext_lazy
stuff = u'abc {0}'.format(ugettext_lazy(u'efg'))

ugettext_lazy(u'efg')または、 を使用してunicodeオブジェクトに強制することもできますunicode(ugettext_lazy(u'efg'))

于 2012-09-11T21:51:51.457 に答える