I'm trying to list all posts that are liked by userself. This is what I'm trying to code.
likeapp/models.py:
class LikeRecord(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='like_record')
article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='like_record')
class Meta:
unique_together = ('user', 'article')
likeapp/views.py:
@transaction.atomic
def db_transaction(user, article):
article.like += 1
article.save()
# like_count = LikeRecord.objects.filter(article=article).count()
if LikeRecord.objects.filter(user=user, article=article).exists():
raise ValidationError('Like already exists')
else:
LikeRecord(user=user, article=article).save()
@method_decorator(login_required, 'get')
class LikeArticleView(RedirectView):
def get_redirect_url(self, *args, **kwargs):
return reverse('articleapp:detail', kwargs={'pk': kwargs['pk']})
def get(self, *args, **kwargs):
user = self.request.user
article = get_object_or_404(Article, pk=kwargs['pk'])
try:
db_transaction(user, article)
messages.add_message(self.request, messages.SUCCESS, '좋아요가 반영되었습니다')
except ValidationError:
messages.add_message(self.request, messages.ERROR, '좋아요는 한번만 가능합니다.')
return HttpResponseRedirect(reverse('articleapp:detail', kwargs={'pk': kwargs['pk']}))
return super(LikeArticleView, self).get(self.request, *args, **kwargs)
articleapp/models.py:
class Article(models.Model):
writer = models.ForeignKey(User, on_delete = models.SET_NULL, related_name = 'article', null = True)
project = models.ForeignKey(Project, on_delete = models.SET_NULL, related_name = 'article', null = True)
title = models.CharField(max_length=200, null=True)
image = models.ImageField(upload_to='article/', null=False)
content = models.TextField(null=True)
price = models.IntegerField(default=0)
amount = models.CharField(max_length=200, null=True)
created_at = models.DateField(auto_now_add=True, null=True)
like = models.IntegerField(default=0)
(articleapp/views.py)
class ArticleLikeListView(ListView):
model = Article
context_object_name = 'article_like_list'
template_name = 'articleapp/likelist.html'
def get_queryset(self):
user = self.request.user
queryset = LikeRecord.objects.filter()
return queryset
I'm trying to use filter() function to distinct liked posts by userself. How can I fix this code?
Try this:
Article.objects.filter(like_record__user=self.request.user)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.