【发布时间】:2021-08-14 07:08:53
【问题描述】:
我正在使用 Django 3.2
我有一个文章模型:
from taggit.managers import TaggitManager
class Article(models.Model):
# fields
tags = TaggitManager()
在我看来,我尽量选择相关文章(使用标签相似度作为“距离度量”)。
这是我的视图处理逻辑中返回相关文章的语句:
class ArticleDetailView(DetailView):
model = Article
pk_url_kwarg = "pk"
slug_url_kwarg = 'slug'
query_pk_and_slug = True
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
article_object = self.get_object()
article_tags_array = list(set([x for x in article_object.tags.names()]))
related_articles = self.model.objects.filter(is_published=True, tags__name__in=article_tags_array).exclude(id=article_object.id).prefetch_related().distinct()
context["related_articles"] = related_articles
return context
然而,此语句在返回的 QuerySet 中EXCLUDE 失败 - 尽管我在返回的 QuerySet 上明确 调用 exclude()。
为什么会这样?
如何解决这个问题,使当前对象不包含在返回的集合中?
【问题讨论】:
-
你是如何检索到
article_object的。 -
@WillemVanOnsem sn-p 充实了一些
标签: django django-models django-queryset