[英]Django Model and Many-to-Many Relationships — finding most similar objects
我遇到了一個找不到解釋的問題。
給定一個對象(在這種情況下,“文章”),我想使用另一種類型的對象(在這種情況下,“類別”)來確定哪些其他文章與文章 X 最相似,通過數量來衡量他們有共同的類別。 文章和類別之間的關系是多對多的。 用例是獲取相關對象的快速列表以顯示為鏈接。
我確切地知道我將如何手動編寫 SQL:
select
ac.article_id
from
Article_Category ac
where
ac.category_id in
(
select
category_id
from
Article_Category
where
article_id = 1 -- get all categories for article in question
)
and ac.article_id <> 1
group by
ac.article_id
order by
count(ac.category_id) desc, random() limit 5
我正在努力解決的是如何使用 Django 模型聚合來匹配這個邏輯並且只運行一個查詢。 我很清楚。 如果可能,更願意在框架內進行。 有沒有人有這方面的指示?
現在我已經在模型框架中找到了一種方法來做到這一點。
related_article_list = Article.objects.filter(category=self.category.all())\
.exclude(id=self.id)
related_article_ids = related_article_list.values('id')\
.annotate(count=models.Count('id'))\
.order_by('-count','?')
在 related_article_list 部分,匹配 2 個或更多類別的其他文章對象將被單獨包含。 因此,當使用注釋對它們進行計數時,數字將 > 1,並且可以這樣排序。
我認為如果你真的想過濾所有類別的文章,正確的答案應該是這樣的:
related_article_list = Article.objects.filter(category__in=self.category.all())\
.exclude(id=self.id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.