ApPeL
ApPeL

Reputation: 4921

django templatetags not return correct data

I've built a small templatetag that looks towards my DB and makes a calculation based on the most popular trophies logged.

templatetag looks as follows:

@register.inclusion_tag('trophies/trophies.html')
def trophies():
    return { 'trophies': Trophies.objects.values("specie").annotate(Count("id")).order_by()}

trophies/trophies.html

{% for obj in trophies %}
    <li><a href="/trophy-room/browse/?specie={{ obj.specie }}">{{ obj.specie }}</a></li>
{% endfor %}

trophy model

class Trophies(models.Model):
    user = models.ForeignKey(User)
    specie = models.ForeignKey(Specie)

Specie model

class Specie(ImageModel):
    species = models.CharField(max_length=50, unique=True, verbose_name='Common Name')

running {{ obj.specie }} returns the id, and running {{ obj.specie.species }} returns nothing.

Why does this happen?

Upvotes: 0

Views: 64

Answers (1)

Silver Light
Silver Light

Reputation: 45932

Try this:

@register.inclusion_tag('trophies/trophies.html')
def trophies():
    return { 'trophies': Trophies.objects.values("specie", "specie__species").annotate(Count("id")).order_by()}

And in template:

{{ obj.specie__species }}

See related question: Display Django values() on Foreign Key in template as object instead of its id

Upvotes: 1

Related Questions