Estoy tratando de obtener la categoría de una habilidad en una plantilla. De la publicación que leí, no puedo obtener información directamente de una clave externa en una plantilla. En cambio, agrego una función en los modelos CharacterSkill para obtener la categoría Skill
Modelos.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_choiceModelo
skillsetchoice {{item.skillcategory}}Pero me sale un error:
Exception Type: TypeError Exception Value: int() argument must be a string or a number, not 'Skill'Traté de inspeccionar el valor con la consola de shell donde puedo recuperar la identificación de la categoría, pero cuando la uso en la plantilla, nada funciona
¡Espero que puedas ayudarme!
Esto no tiene nada que ver con llamarlo desde la plantilla.
self.skill ya es una instancia de Skill. No hay necesidad de consultar ese modelo explícitamente.
def skillcategory(self): return self.skill.skillset_choiceY, de hecho, este método es bastante inútil; ciertamente puedes hacerlo directamente en la plantilla:
skillsetchoice {{ item.skill.skillset_choice }}Reemplace self.skill con self.skill.id (en versiones anteriores de Django, su código funcionaría por cierto):
def skillcategory(self): return Skill.objects.get(id = self.skill.id).skillset_choicePero esto es mucho mejor:
def skillcategory(self): return self.skill.skillset_choicePero, ¿realmente necesitas este método? Puedes usar:
{{ item.skill.skillset_choice }} Si desea mostrar cat1 , entonces ( get_foo_display ):
{{ item.skill.get_skillset_choice_display }}