Django在用户和所选文章之间添加一个关系

2024-09-30 02:15:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的模型文章。模型为:

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()

我的逻辑正确吗? 也许我需要改变一切


Tags: 模型idmodelmodelsrequestarticle文章favorite
2条回答

将用户映射到项目的表有一个article字段,它只是一个整数列,而不是外键。它与您的articles表没有任何关系,只有两个共享一个名称

您所做的工作称为多对多关系,Django实际上有一个名为^{}的特殊字段,它为您管理中间表(因此您不必创建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()

您需要通过外键链接LikeArticleArticle

class LikeArticle(models.Model):
    article = models.ForeignKey(Article)
    user = models.ForeignKey(User)

相关问题 更多 >

    热门问题