我试图在模板中获取技能类别。 从我读到的帖子中,我无法直接从模板中的外键获取信息。 相反,我在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,但是当我在模板中使用它时,没有任何工作
希望你能帮助我!
答案 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 }}