你能用__in来过滤外键吗?

时间:2012-06-07 18:29:27

标签: sql django

我有以下查询:

Child.objects.filter(
    foreign_key_field__in=Parent.objects.filter(param=something))

视图以:

消亡
invalid literal for int() with base 10: 'value of something'

在我看来foreign_key_field期望某种id,我给它一个实际价值。难道我做错了什么?这可能吗?

目标是避免迭代父项的child_set以在子项中调用另一个查询生成方法,这会导致为返回的每个单个对象生成查询。相反,我想诱导ORM在一个查询中抓取所有匹配的子节点,并正常迭代它们。

1 个答案:

答案 0 :(得分:1)

问题是你在做什么:

Child.objects.filter(parent__in=Parent.objects.filter(...))

Child.objects.filter(parent_id__in=Parent.objects.filter(...))

第一个版本可以使用,第二个版本会给你“带有基数10的int()的无效文字”错误。