Django根据不起作用的类别计算类似职位

Django根据不起作用的类别计算类似职位,django,categories,similarity,Django,Categories,Similarity,我想根据类别计算类似的帖子。这是迄今为止我在模型中所做的: class Post(models.Model): category = models.ForeignKey(Category, on_delete=models.CASCADE, default=15) def get_related_posts_by_tags(self): category = get_object_or_404(Category, name=self.category.title)

我想根据类别计算类似的帖子。这是迄今为止我在模型中所做的:

class Post(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE, default=15)

    def get_related_posts_by_tags(self):
       category = get_object_or_404(Category, name=self.category.title)
       posts = Post.objects.filter(category=category)
       return posts

class Category(models.Model):
    name = models.CharField(max_length=250, unique=True)
在我的模板中:

{% for posts in object.get_related_post_by_tag %}
   {{ posts.title }}
{% endfor %}
无论出于什么原因,这都不起作用,在我的模板中,我没有看到任何具有相同类别的帖子。这就是为什么我想知道我是否做错了,或者我是否有一个可以轻松解决的小问题。感谢您的帮助。

您可以使用:

class Post(models.Model): category = models.ForeignKey(Category, on_delete=models.CASCADE, default=15) def get_related_posts_by_tags(self): return Post.objects.filter(category_id=self.category_id) 在您的模板中还有一个输入错误:它是通过标签获取与您相关的帖子,所以是
\u帖子
,而不是
\u帖子

{%for object.get_related_posts_by_tags%}
{{posts.title}

{%endfor%}
您的
类别
是否有
标题
名称
,因为您使用的是
self.Category.title
,但您的
类别
似乎只有一个
名称
字段。@WillemVanOnsem wait,我知道问题;在他的模型中,他说“object.get_related_post_by_tags”,在他的模板中,他说“object.get_related_post_by_tag”@WillemVanOnsem,它只有名称字段。@JohnD9oe:是的,但这仍然需要额外的查询,所以效率不高。您将使用
self.category
进行查询,然后使用
get\u objects\u或\u 404
进行另一次查询,以再次检索相同的类别。您好,您的答案有效,但
排除(pk=self.pk)
无效。它在推荐位置显示了相同的帖子。@Xandier:您确定没有
返回经过筛选的查询集,然后调用
.exclude(..)
吗?通常,如果
.exclude(..)
调用位于
QuerySet
方法调用链中,它将排除当前post.no I返回的带有
.exclude(pk=self.pk)
的过滤查询集。我这样做了:
return Post.objects.filter(category\u id=self.category\u id)。exclude(pk=self.pk)
@Xandier:can
print(self.pk)
用于返回行。你确定你没有写两篇标题相同的文章,等等@Williem Van Onsem,不,我确定他们没有相同的标题,当你打印(self.pk)时,一篇文章我得到74分。当我尝试另一个帖子时,它是1。 class Post(models.Model): category = models.ForeignKey(Category, on_delete=models.CASCADE, default=15) def get_related_posts_by_tags(self): return Post.objects.filter( category_id=self.category_id ).exclude(pk=self.pk)
{% for posts in object.get_related_posts_by_tags %}
   {{ posts.title }}
{% endfor %}