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

Wil*_*iam 3 python django django-models django-views

我正在建立一个新闻网站.虽然我试图得到具有相同标签的相关新闻列表.错误说:精确查找的QuerySet值必须限制为使用slicing-Django的一个结果.

我有两个模型新闻和标签,标签是新闻的多对多外键.

新闻模式:

class News(models.Model):

    tag = models.ManyToManyField(Tag, blank=True, verbose_name='tag')
Run Code Online (Sandbox Code Playgroud)

标签型号:

class Tag(models.Model):

    name = models.CharField(max_length=40)
Run Code Online (Sandbox Code Playgroud)

视图:

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
    })
Run Code Online (Sandbox Code Playgroud)

有朋友可以帮忙吗?非常感谢你!

小智 11

如果您在过滤器参数中使用查询集或列表,则会出现此错误。例如,

News.objects.filter(title = a)
Run Code Online (Sandbox Code Playgroud)

在这里,如果过滤器内的“a”是查询集或列表,则会出现此错误。


Shr*_*pia 8

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


Lem*_*eur 5

以下将有效:

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())
Run Code Online (Sandbox Code Playgroud)