J'utilise la version 1,8Django requêtes lentes depuis ne peuvent pas utiliser liées
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)
Je ne ai besoin d'énumérer les dossiers purchaseOrder qui default_code (dans le modèle ProductProductQu'est) est nul.
Je ne peux pas filtrer à l'aide « purchaseorderline_set.product_id_set.default_code = Aucun » depuis purchaseorderline_set est une requête serties et ne dispose pas d'un attribut product_id_set comme indiqué here. J'ai donc essayé d'utiliser ceci:
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)
Mais cela prend plus de 3 secondes. Je considère cela comme un LOT prenant en considération que je suis seulement un travail dans mon DEV env (machine n'est pas lent) et DB est vraiment petit jusqu'à présent, car il n'y a que 269 rechts PurchaseOrder, 396 PurchaseOrderLine recs et 726 ProductProduct recs. Je suppose qu'il y a un moyen efficace que je ne vois pas.
salut @Nam Nguyễn, je pense pol_ids = POL.objects.filter (prod__in = p) .values_list ('id', flat = True) –
oui, créer une liste d'id dans la requête est mieux. Je viens de montrer un autre moyen d'interroger, je n'ai pas besoin de faire la chose compliquée comme ci-dessus –
Je viens de finir par utiliser la méthode avec "values_list ('id', flat = True)". Maintenant, c'est beaucoup plus rapide! Merci – Rmartin