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”是查询集或列表,则会出现此错误。
通常当我们在 django 模型对象的地方使用模型查询集时会发生这个错误。在给定的问题中,您也做了同样的事情。“Objects.filter”返回模型查询集,可以有单个或多个django模型对象,但“objects.get”返回单个django模型对象。或者我们可以将 .last() 和 .first() 与“objects.filter”一起使用。
以下将有效:
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)
| 归档时间: |
|
| 查看次数: |
6509 次 |
| 最近记录: |