Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

203
Vistas
La función de modelo de llamada en la plantilla no funciona

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_choice

Modelo

 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!

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

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_choice

Y, de hecho, este método es bastante inútil; ciertamente puedes hacerlo directamente en la plantilla:

 skillsetchoice {{ item.skill.skillset_choice }}
about 4 years ago · Santiago Trujillo Denunciar

0

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_choice

Pero esto es mucho mejor:

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

Pero, ¿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 }}
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda