精确查找的 QuerySet 值必须使用切片限制为一个结果 - Django

新手上路,请多包涵

我正在建立一个新闻网站。当我试图获取具有相同标签的相关新闻列表时。错误说:

精确查找的 QuerySet 值必须使用切片限制为一个结果。

我有两个型号 NewsTag 。标记是 News 的多对多外键。

新闻模型:

 class News(models.Model):

    tag = models.ManyToManyField(Tag, blank=True, verbose_name='tag')


标签型号:

 class Tag(models.Model):

    name = models.CharField(max_length=40)

看法:

 def newsDetailView(request, news_pk):
    news = get_object_or_404(News, id=news_pk)
    tags = news.tag.annotate(news_count=Count('news'))
    relative_news = News.objects.filter(tag=tags)

    return render(request, "news_detail.html", {
        'news': news,
        'tags': tags,
        'relative_news': relative_news
    })

原文由 William 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 476
2 个回答

以下将起作用:

 def newsDetailView(request, news_pk):
    news = get_object_or_404(News, id=news_pk)
    relative_news = News.objects.filter(tag__id__in=news.tag.all())

原文由 Lemayzeur 发布,翻译遵循 CC BY-SA 4.0 许可协议

当我们在 django 模型对象的地方使用模型查询集时,通常会发生此错误。在给定的问题中,你做了同样的事情。 “Objects.filter”返回模型查询集,可以有单个或多个django模型对象,但“objects.get”返回单个django模型对象。或者我们可以将 .last() 和 .first() 与“objects.filter”一起使用。

原文由 Shridhar Dhanopia 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题