在模板中调用模型函数不起作用

时间:2017-04-07 15:46:31

标签: python django

我试图在模板中获取技能类别。 从我读到的帖子中,我无法直接从模板中的外键获取信息。 相反,我在CharacterSkill模型上添加了一个函数来获得技能类别

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}}

但是我收到了一个错误:

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

我尝试使用shell控制台来查看值,我可以在其中获取类别ID,但是当我在模板中使用它时,没有任何工作

希望你能帮助我!

2 个答案:

答案 0 :(得分:1)

这与从模板中调用它无关。

self.skill 一个Skill实例。无需明确查询该模型。

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

事实上这种方法毫无意义;你当然可以直接在模板中做到这一点:

skillsetchoice {{ item.skill.skillset_choice }}

答案 1 :(得分:1)

self.skill替换为self.skill.id(在旧版本的Django中,您的代码可以顺便使用):

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

但这要好得多:

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

但你真的需要这种方法吗?您可以使用:

{{ item.skill.skillset_choice }}

如果您想显示cat1,那么(in a location block):

{{ item.skill.get_skillset_choice_display }}