2017-04-07 14 views
1

テンプレート内のスキルのカテゴリを取得しようとしています。 私が読んだ記事からは、テンプレートの外部キーから情報を直接取得することはできません。 は代わりに、私はスキルカテゴリテンプレート内のモデル関数を呼び出せません

にModels.py

class Character(models.Model): 
    name = models.CharField(max_length=70) 

class Skill(models.Model): 
    name = models.CharField(max_length=70) 
    cat1 = '01' 
    SKILLSET_CHOICE = ((cat1:'cat1')) 
    skillset_choice = models.CharField(
     max_length=2, 
     choices = SKILLSET_CHOICE, 
     default='', 
     blank=True, 
     null=True, 
     ) 

class CharacterSkill(models.Model): 
    character = models.ForeignKey(Character, on_delete=models.CASCADE) 
    skill = models.ForeignKey(Skill, on_delete=models.CASCADE) 
    def skillcategory(self): 
     return Skill.objects.get(id = self.skill).skillset_choice  

テンプレート

skillsetchoice {{item.skillcategory}} 

を取得するためにCharacterSkillモデルに機能を追加するしかし、私はエラーを取得:

Exception Type: TypeError 
Exception Value:  
int() argument must be a string or a number, not 'Skill' 

を私はシェルコンソールを使って値を調べようとしました。ここで私は猫を取り戻すことができますegory idですが、テンプレートで使用しても何も問題ありません。

私を助けてくれることを願っています!

答えて

1

これはテンプレートから呼び出すこととは関係ありません。

self.skillは、です。すでにスキルのインスタンスです。そのモデルに明示的に問い合わせる必要はありません。

def skillcategory(self): 
    return self.skill.skillset_choice  

実際、この方法はかなり意味がありません。あなたは確かにテンプレートで直接それを行うことができます。

def skillcategory(self): 
    return Skill.objects.get(id = self.skill.id).skillset_choice 

しかし、これははるかに優れています:

skillsetchoice {{ item.skill.skillset_choice }} 
+0

を私は私の人生を複雑に知っていた、それは、あなたの方法を働いて答えてくれてありがとうです – Stakha

1

は(ジャンゴの古いバージョンでは、コードが邪魔で動作します)self.skill.idself.skillを交換し

def skillcategory(self): 
    return self.skill.skillset_choice 

本当にこの方法が必要ですか?あなたが使用することができます。

{{ item.skill.skillset_choice }} 

あなたはcat1、(get_foo_display)を表示したい場合は、次の

{{ item.skill.get_skillset_choice_display }} 
関連する問題