我有一个简单的模型文章。该模型是:
class Article(models.Model):
title = models.CharField()
text = models.TextField()
likes = models.IntegerField(default=0)
user = models.ForeignKey(User)
我也登录,并且喜欢,每个用户都有喜欢的文章。 我制作新模型:
class LikeArticle(models.Model):
article = models.IntegerField()
user = models.ForeignKey(User)
在视图中我们有
def articleLike(request):
if request.method == 'POST':
article_id = request.POST['id']
article_like = LikeArticle(
article=article_id,
user=request.user
)
article_like.save()
当我们想看所有喜欢的文章时
def favorite(request):
favorite_list = LikeArticle.objects.all()
return render(request, 'article/favorite.html', {'articleList': favorite_list})
但现在它返回我的id文章和用户名,我如何过滤和选择 Article.objects.all()
我的逻辑是否正确? 也许我需要做一切不同的事情?
答案 0 :(得分:0)
您需要通过外键链接LikeArticle
和Article
:
class LikeArticle(models.Model):
article = models.ForeignKey(Article)
user = models.ForeignKey(User)
答案 1 :(得分:0)
将用户映射到文章的表具有article
字段,该字段只是整数列,而不是外键。除了两个共享名称之外,它与您的文章表没有任何关系。
您正在做的事情被称为多对多关系,而Django实际上有一个名为ManyToManyField
的特殊字段,可以为您管理中间表(因此您不必创建LikeArticle
):
class Article(models.Model):
title = models.CharField()
text = models.TextField()
likes = models.IntegerField(default=0)
user = models.ForeignKey(User)
favorited_by = models.ManyToManyField(User, related_name="favorite_articles")
现在,您可以这样做:
def favorite(request):
favorite_list = request.user.favorite_articles.all()
return render(request, 'article/favorite.html', {'articleList': favorite_list})
反向关系:Article.objects.get(id=123).favorited_by.all()