2017-10-15 5 views
0

comment trouver beaucoup de matches avec un objet à partir de l'ensemble des objets QuerySet (qui contiennent un objet de recherche) dans un autre nombre queryset objets djangocomment trouver beaucoup de correspondances d'un objet d'un même jeu de caractères dans un autre jeu de requête Django?

par exemple, comment trouver le produit le plus souvent dans les produits de commande et d'en déduire la quantité

Je présente mes excuses pour cette question, je suis toujours Noob et mon cerveau ne si critique penser

modèles de commande

class Order(models.Model):     
    products_of_order = models.ManyToManyField("ProducInOrder", related_name='Some_Products') 

class ProducInOrder(models.Model): 
    order = models.ForeignKey(Order, blank=True, null=True, default=None) 
    product = models.ForeignKey(Product, blank=True, default=None) 
    quantity = models.IntegerField(default=0) 

modèles de produits

class Product(models.Model): 
     name_of_product = models.CharField(max_length=20) 

i essayer de le faire:

product = Product.objects.all() 
some = Order.objects.filter(products_of_order__product__in=product).count() 

mais il est juste retour tous les produits qui contiennent des produits de commande, comment obtenir compter chaque produit dans les produits de commandes qui correspond à la liste des produits.

j'ai une idée de le faire, mais je veux le faire dans une ligne) dans un queryset)

some_dict = {} 
for i in some: 
    for s in i.products_of_order.all(): 
     if s.product.name_of_product in some_dict: 
      some_dict.s.product.name_of_product += 1 
     else: 
      some_dict.s.product.name_of_product = 1 

Répondre

0

Il est pas clair ce que vous demandez. Mais ce dernier morceau de code serait exprimé plus naturellement en utilisant defaultdict:

count = collections.defaultdict(int) 
for order in some: 
    for product in order.products_of_order.all(): 
     count[product.name] += 1