Foreignkey返回对象而不是self.name

时间:2014-12-19 13:39:48

标签: django django-models

我找到了几个看起来像我的问题的答案,但事实并非如此。也许我在这里遗漏了一些东西,但是这里有了;

我希望模型默认返回它链接到的外键项的名称。

这是耦合表

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时,它不应该返回Trait.name吗?显然,它没有,否则我不会问这个问题。

另外,当我在CharacterTrait中执行此操作时;

def unicode (个体经营):             return self.id_trait.name

我回来了;

[<CharacterTrait: Homid>]

这就是我想要的,但只是字符串“Homid”而不是模型。

3 个答案:

答案 0 :(得分:1)

CharacterTrait模型的unicode方法中,您将返回Trait对象而不是字符串/ unicode对象。

因此,请按以下方式更新您的方法以返回字符串。

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

答案 1 :(得分:1)

__unicode__方法必须返回一个unicode

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

答案 2 :(得分:0)

__str__将返回一个类的值。 在下面的代码中用您的字段替换字段名称。

def __str__(self):
    return self.name