Search code examples
djangopaginator

Django Paginator append extra data for each item


How would I change my code to add a liked item to every post returned from paginator. This is my code but it returns a list which I can't check if it .has_next in my template therefore my infinite scroll doesn't work.

try:
    posts_given = paginator.page(page)
except PageNotAnInteger:
    posts_given = paginator.page(1)
except EmptyPage:
    posts_given = paginator.page(paginator.num_pages)

results = []
for post in posts_given.object_list:
    liked = like_post.objects.filter(user=request.user, post=post)
    results.append((post, liked))
posts_given = results

Solution

  • Why you need to add liked in that way? It will produce n+1 query problem. Learn model relationships. Then you can use prefetch_related to load your liked on your posts result.

    Reference: https://docs.djangoproject.com/en/3.0/ref/models/querysets/#prefetch-related