0
我有3个模型。优化Django-SQL查询
class ShipmentPPTLMapping(models.Model):
pptl_id = models.CharField(max_length = 255)
shipment_id = models.ForeignKey('Shipment', related_name = 'pptls')
class ShipmentBagSealMapping(models.Model):
bag_seal = models.CharField(max_length = 255)
status = models.CharField(max_length = 255, default = 'open')
shipment_id = models.ForeignKey('Shipment', related_name = 'bags')
class Shipment(models.Model):
job_id = models.CharField(max_length = 255)
我需要写过滤掉那些袋子from ShipmentBagSealMapping
这是closed
状态的查询,提供pptl_id
from ShipmentPPTLMapping
。
我有一个pptl_id
在开始。因为我过滤了所有与此有关的货物,因为shipments_obj
与ShipmentBagSealMapping
有关,所以使用shipments_obj
是我可以过滤掉封闭袋子的唯一方法。
shipment_pptl_mapping_obj_list = ShipmentPPTLMapping.objects.filter(pptl_id = pptl_id)
然后我的shipment_pptl_mapping_obj_list
周围循环来找到状态closed
袋。
for shipment_pptl_mapping_obj in shipment_pptl_mapping_obj_list:
closed_bags = shipment_pptl_mapping_obj.shipment_id.bags.filter(status = 'closed')
#and then again another loop
for bags in closed_bags:
#something
我怎样才能找到一切只是在1查询?
这是我的最终代码
shipment_pptl_mapping_obj_list = ShipmentPPTLMapping.objects.filter(pptl_id = pptl_id) #--> extend this
for shipment_pptl_mapping_obj in shipment_pptl_mapping_obj_list:
closed_bags = shipment_pptl_mapping_obj.shipment_id.bags.filter(status = 'closed')
for bags in closed_bags:
#do something
我想是这样的
closed_bags = Some Query
for bags in closed_bags:
#do_something
**错误**'无法解析关键字 'pptls' 到现场。选择是:bag_seal,id,shipment_id,status“}'' – PythonEnthusiast
为什么FK的字段名称不应该包含'_id'?你指的是什么问题? – PythonEnthusiast
Django为每个FK字段添加'_id'。这个问题是另一个程序员应该使用'name_id_id' –