我使用的是1.8版本
class ProductProduct(models.Model):
product_tmpl = models.ForeignKey(ProductTemplateModel)
default_code = models.CharField()
name_template = models.CharField()
...
class PurchaseOrder(models.Model):
# fields...
class PurchaseOrderLine(models.Model):
id = models.IntegerField()
product_id = models.ForeignKey(ProductProduct)
order_id = models.ForeignKey(PurchaseOrder)
我只需列出PurchaseOrder记录,其中default_code(在ProductProduct模型中)为空。
我无法过滤使用" purchaseorderline_set.product_id_set.default_code = None" 因为purchaseorderline_set是一个查询集,并且它没有属性 product_id_set如所示here。所以我尝试使用它:
orders_recs = PurchaseOrder.objects.all().order_by('-id')
orders_recs = PurchaseOrder.objects.filter(purchaseorderline_set.product_id_set.default_code=None).order_by('-id')
orders = []
for order_rec in orders_recs:
line = order_rec.purchaseorderline_set.all()
if line and line[0].product_id.default_code == None:
orders.append(order_rec)
但它超过3秒。我认为这很多考虑到我只是一个在我的DEV环境中工作(机器不慢)和DB到目前为止很小,因为只有269个PurchaseOrder recs,396 PurchaseOrderLine recs和726 ProductProduct recs。
我想有一种我没有看到的有效方式。
答案 0 :(得分:0)
很抱歉,如果它不能帮助你
# pp:ProductProduct
# po:PurchaseOrder
# pol:PurchaseOrderLine
# List PP with None
pp = PP.objects.filter(def_c = None)
# list pol have pp None
pol = POL.objects.filter(prod__in = pp)
# create a list ids of POL
ids = []
for i in pol:
ids.append(pol.order_id)
po = PO.objects.filter(id__in = ids)
答案 1 :(得分:0)