使用 django,如果用户"likes"其他项目的文章,我该如何检索?



我的数据库中有三个表,第一个是包含用户基本信息的"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})

最新更新