2014-12-19 2 views
0

Я нашел несколько ответов, которые похожи на мою проблему, но нет. Может быть, я здесь что-то не хватает, но здесь идет;Возвращаемый объект Foreignkey вместо self.name

Я хочу, чтобы модель возвращала по умолчанию имя объекта foreignkey, с которым оно связано.

Это соединительная таблица

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;

Защиту юникода (Я): возвращение self.id_trait.name

я вернусь это;

[<CharacterTrait: Homid>] 

Это то, что я хочу, но только строка «Хомид», а не как модель.

+0

как о '' возвращения self.id_trait.name''? –

ответ

1

В CharacterTrait модель юникодного метода, который вы возвращаете Trait объект вместо объекта string/unicode.

Так что обновите свой метод, как показано ниже, чтобы вернуть строку.

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

Это не сработало. Я получаю ту же ошибку. Исключительное значение: \t принуждение к Unicode: требуется строка или буфер, найденная черта – Eloque

1

метод __unicode__ должен возвращать юникод

class CharacterTrait(models.Model): 
    ... 
    def __unicode__(self): 
     return unicode(self.id_trait) # this will call Trait.__unicode__ 
Смежные вопросы