Подсчет количества сообщений, понравившихся пользователю, в Django
Я хочу создать переменную, которую я могу передать как контекст, которая будет подсчитывать сколько сообщений понравилось пользователю.
Вот мой models.py
class post(models.Model):
title = models.CharField(max_length = 255)
title_tag=models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete = models.CASCADE)
body = models.TextField()
post_date = models.DateTimeField(auto_now_add=True)
category = models.CharField(max_length=255, default = "coding")
likes = models.ManyToManyField(User, related_name='blog_posts')
def __str__(self):
return self.title + ' | ' + str(self.author) + ' | ' + str(self.category)
def get_absolute_url(self):
from django.urls import reverse
return reverse('article-detail',args=[self.id] )
def total_likes(self):
return self.likes.count()
Вот мой views.py
class ArticleDetailView(DetailView):
model = post
template_name = 'article_details.html'
def get_context_data(self,*args,**kwargs):
cat_menu = Category.objects.all()
#amount_of_user_likes = ????
context = super(ArticleDetailView,self).get_context_data(*args,**kwargs)
'''context allows us to access these values on our page'''
stuff=get_object_or_404(post,id=self.kwargs['pk'])
total_likes= stuff.total_likes()
liked = False
if stuff.likes.filter(id=self.request.user.id).exists():
liked = True
context['cat_menu'] = cat_menu
context['total_likes']=total_likes
context['liked'] = liked
context['amount_of_user_likes']=amount_of_user_likes
return context
Я не уверен, как запросить базу данных, чтобы получить количество сообщений, которые понравились пользователю, поскольку столбец liked находится в таблице post, а не в таблице user. Однако, поскольку это отношение "многие ко многим", мы можем как-то получить доступ к пользователю, но я не уверен.
Вы можете посчитать, сколько раз myuser
понравилось сообщение с:
myuser.blog_posts.count()
поэтому, если вы хотите сделать это для вошедшего пользователя, мы можем работать с:
context['amount_of_user_likes'] = self.request.user.blog_posts.count()