2014-12-19 132 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__ 
相关问题