我的数据库中有三个表,第一个是包含用户基本信息的"user"表,第二个是"article"表,最后一个是"user_like_article"表,如果用户喜欢文章,它会为用户和文章存储记录。
例如,如果用户a喜欢文章X,那么"user_like_article"表中的记录将是这样的:(a,X)
所以现在,我想指出登录的用户是否喜欢我发布的文章列表中的某篇文章。我想办法了。我首先得到了文章列表。之后,我得到了特定用户喜欢的文章id的列表。其他的事情就像下面的代码一样
for article in articles_to_diplay:
if article in article_list_user_likes:
article['like'] = True
这种方法有效,但不知怎么的,我觉得它太贵了。显示"点赞"按钮只是我项目的一小部分,但它确实非常常见。脸书、推特、博客、"赞"都在广泛使用。
有没有什么方法可以降低成本来实现这一功能?
非常感谢!
使用一些好看的API并不简单,因为我们根据登录的用户对象检查查询,所以我们需要为每个文章对象注入is_liked
方法。
此外,您可以为Article
模型使用ManyToManyField
字段,而不是创建额外的表(除非您使用了一些额外的数据,请告诉我,这样我就可以相应地修改答案。
型号.py
from django.contrib.auth.models import User
class Article(models.Model):
title = models.CharField(max_length=50)
likes = models.ManyToManyField(User)
def __unicode__(self):
return self.title
views.py
def home(request):
articles = Article.objects.all().prefetch_related('likes')
for a in articles:
a.is_liked = (request.user in a.likes.all())
return render(request, 'home.html', {'articles': articles})