简体   繁体   中英

How to filter liked posts by User? (Django)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM