2014-12-19 288 views
0

我發現了幾個答案,看起來像我的問題,但不是。也許我在這裏錯過了一些東西,但是這裏有一些;Foreignkey返回對象,而不是self.name

我想讓一個模型返回默認的鏈接到的外鍵項目的名稱。

這是連接表

class CharacterTrait(models.Model): 
    id = models.IntegerField(primary_key=True) # AutoField? 

    id_character = models.ForeignKey(Werewolfcharacter, null=True, db_column = 'id_character') 
    id_trait  = models.ForeignKey(Trait,    null=True, db_column = 'id_trait') 

    class Meta: 
     managed = False 
     db_table = 'character_trait' 

    def __unicode__(self): 
       return self.id_trait 

這是性狀表

class Trait(models.Model): 
    id = models.IntegerField(primary_key=True) # AutoField? 
    id_traittype = models.ForeignKey(Traittype, null=True, db_column = 'id_traittype') 

    name = models.CharField(max_length=32) 

    class Meta: 
     managed = False 
     db_table = 'trait' 

    def __unicode__(self): 
       return self.name 

所以,當我要問的返回值,當我呼籲CharacterTrait得到我期望返回鏈接特質的名稱。但是,當我去管理員,我得到這個錯誤;

Exception Type: TypeError 
Exception Value: coercing to Unicode: need string or buffer, Trait found 

但是,當它發現特質,不應該返回Trait.name?顯然,它不,否則我不會問這個問題。

另外,當我在CharacterTrait中這樣做時;

高清的Unicode(個體經營): 回報self.id_trait.name

我回來這一點;

[<CharacterTrait: Homid>] 

這是我想要的,但只有字符串「Homid」,而不是作爲模型。

+0

怎麼樣''回報self.id_trait.name''? –

回答

1

CharacterTrait模型的unicode方法您正在返回Trait對象而不是字符串/ unicode對象。

因此,更新您的方法如下返回字符串。

class CharacterTrait(models.Model): 
    ... 
    def __unicode__(self): 
      return u'' + self.id_trait 
+0

這沒有奏效。我犯了同樣的錯誤。異常值:\t 強制爲Unicode:需要字符串或緩衝區,找到特徵 – Eloque

1

__unicode__方法必須返回一個Unicode

class CharacterTrait(models.Model): 
    ... 
    def __unicode__(self): 
     return unicode(self.id_trait) # this will call Trait.__unicode__ 
相關問題