Python Django筛选器对象来自另一个表的外键

Python Django筛选器对象来自另一个表的外键,python,django,sqlite,Python,Django,Sqlite,两个表格:职位和评级 评级包含列-post(FK),即post表的主ID。 我正在尝试按用户和ratingtype列筛选表评级,以获取可用于筛选表的post(FK)值 Post.objects.filter(pk__in=Rating.objects.get(post=post).filter(Rating.objects.filter(user = self.request.user, ratingtype='like'))) 您可以使用两个连续的下划线(\uuuuuu)来“浏览”关系,因此

两个表格:职位和评级

评级包含列-post(FK),即post表的主ID。 我正在尝试按用户和ratingtype列筛选表评级,以获取可用于筛选表的post(FK)值

Post.objects.filter(pk__in=Rating.objects.get(post=post).filter(Rating.objects.filter(user = self.request.user, ratingtype='like')))
您可以使用两个连续的下划线(
\uuuuuu
)来“浏览”关系,因此:

Post.objects.filter(
评级用户=self.request.user,
额定值\uu额定值type='like'
).distinct()
如果用户给出了多个评分,则该子句防止多次重复相同的
Post


如果在
ForeignKey
中指定了or,则该关系的名称与之相反,因此,它不是
rating\uuuu
,而是
related\u query\u name\uuu
(使用
related\u query\u name
用于
related\u query\u name=…
参数的值).

所以你想让所有
Post
对象都来自某个给定的用户?是的,确实如此。我不确定我在帖子中的解释是否公平。我需要按“用户”和“评级类型”列提取表“评级”中“职位”列的值,并使用该值来筛选职位表。@Augis:但您稍后要检索
post
对象本身吗?然后使用
JOIN
s更高效、更优雅,这就是双下划线所做的。@Augis:因此不需要提取列的值。Django可以反过来理解关系。非常感谢,花了一些时间才意识到你在说什么,但你是对的,非常感谢!
Post.objects.filter(
    rating__user=self.request.user,
    rating__ratingtype='like'
).distinct()