How can I get the object count for a model in Django's templates?

后端 未结 3 1004
陌清茗
陌清茗 2020-12-24 01:16

I\'m my Django application I\'m fetching all the objects for a particular model like so:

secs = Sections.objects.filter(order__gt = 5)

I pa

相关标签:
3条回答
  • 2020-12-24 01:31

    Additionally to what Daniel said, Django creates reverse relationships automatically (as Daniel said above) unless you override their names with the related_name argument. In your particular case, you would have something like:

    class Book(models.Model):
        section = models.ForeignKey(Section, related_name="books")
    

    Then you can access the section's books count in the template by:

    {{ sec.books.count }}
    

    As you intimated in your question.

    0 讨论(0)
  • 2020-12-24 01:34

    If Books has a ForeignKey to Sections, then Django will automatically create a reverse relationship from Sections back to Books, which will be called books_set. This is a Manager, which means you can use .filter(), .get() and .count() on it - and you can use these in your template.

    {{ sec.books_set.count }}
    

    (By the way, you should use singular nouns for your model names, not plurals - Book instead of Books. An instance of that model holds information for one book, not many.)

    0 讨论(0)
  • 2020-12-24 01:35

    As for a 2019 answer. I would suggest making use of related_name while making your ForeignKey to look like that:

    section = models.ForeignKey(Section, on_delete=models.SET_NULL, related_name='books')
    

    Then you can use it as follows:

    {{ section.books.count }} 
    

    or

    {{ section.books|length }}
    
    0 讨论(0)
提交回复
热议问题