我想要做的是检索 CarModel 对象的过滤列表,其中 carfield 位于另一个模型的字段列表中,例如 GasModel。但 GasModel 集也必须被过滤到一个列表,其中 GasModel 中的一个字段必须等于 CarModel 中的另一个字段(不同的字段)。
所以我几乎想过滤一个列表,以便该列表的字段包含在不同模型的单独字段列表中,并且该列表(第二个模型的)也被过滤(但通过不同的字段第一个(汽车)模型)。我希望这一切都在一次查询集调用中。
这是我到目前为止所拥有的,我相信的错误是
WHERE anothergasfield = another_field_from_car_carmodel
我是否缺少 FROM 关键字或其他内容?如果是这样,它应该去哪里?
CarModel.objects.extra(where = ['carfield IN (SELECT gasfield FROM\
gas_gasmodel WHERE anothergasfield = another_field_from_car_carmodel)'])
.order_by(...)
谢谢
最佳答案
这个怎么样:
CarModel.objects.extra(where = ['carfield IN (SELECT gasfield FROM\
gas_gasmodel WHERE anothergasfield = carmodel.another_field_from_car_carmodel)'])
.order_by(...)
只需将 carmodel
替换为 CarModel
的表名称即可。通常是 {{ app_name }}_{{ model_name }}
。
您已嵌套 select
语句,其中的字段来自 gas_gasmodel
表,而不是来自 carmodel
表。
关于python - django ORM 中的自定义 SQL : Filtering a list based off another filtered list in one query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700100/