我使用的1.8版因爲無法Django的慢查詢中使用相關的設置
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(在產品Product模型)爲空。
使用「purchaseorderline_set.product_id_set.default_code =無」 因爲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秒多。我認爲這是一個考慮因素,因爲只有269個PurchaseOrder recs,396個PurchaseOrderLine recs和726個ProductProduct recs,所以我只有一個在我的DEV env中工作(機器不是很慢),而DB目前非常小。
我想有一種有效的方式,我沒有看到。
喜@Nam阮,我覺得 pol_ids = POL.objects.filter(prod__in = PP).values_list ('id',flat = True) –
是的,在查詢中創建一個id列表比較好。我只是展示了另一種查詢方式,不需要像上面那樣做複雜的事情 –
我剛剛結束了使用「values_list('id',flat = True)」的方法。現在它快得多!謝謝 – Rmartin