...
class Post(models.Model): id = models.CharField(max_length=255, primary_key=True) message = models.TextField() created_time = models.DateTimeField(db_index=True) updated_time = models.DateTimeField() creator = models.ForeignKey(Member, db_index=True) likes = models.IntegerField(db_index=True)
class Comment(models.Model): id = models.CharField(max_length=255, primary_key=True, db_index=True) message = models.TextField() created_time = models.DateTimeField(db_index=True) creator = models.ForeignKey(Member, db_index=True) post = models.ForeignKey(Post, db_index=True) likes = models.IntegerField(db_index=True)
...
top_commented_posts = Post.objects.annotate(num_comments=Count('comment')).order_by('-num_comments')[:10]
...
{% for post in top_commented_posts %} <tr> <td>{{ forloop.counter }}.</td> <td>{{ post.message | slice:"25"}}...</td> <td>{{ post.num_comments }}</td> <td><a class="btn btn-xs btn-inverse" href="https://www.mydomain.com/{{ post.id }}/" target="_blank"><span class="icon-link"></span></a></td> </tr>{% endfor %}
...
5335.56 ms (27 queries)
Hello there,I am trying to perform aggregation from all objects which have one foreign key.These are my models:
...
class Post(models.Model):id = models.CharField(max_length=255, primary_key=True)message = models.TextField()created_time = models.DateTimeField(db_index=True)updated_time = models.DateTimeField()creator = models.ForeignKey(Member, db_index=True)likes = models.IntegerField(db_index=True)class Comment(models.Model):id = models.CharField(max_length=255, primary_key=True, db_index=True)message = models.TextField()created_time = models.DateTimeField(db_index=True)creator = models.ForeignKey(Member, db_index=True)post = models.ForeignKey(Post, db_index=True)likes = models.IntegerField(db_index=True)
...And this is my query:
top_commented_posts = Post.objects.annotate(num_comments=Count('comment')).order_by('-num_comments')[:10]