简体   繁体   English

如何从另一个查询集中的一个查询集中找到一个对象的大量匹配?

[英]how to find much matches of one objects from one queryset in another queryset Django?

how to find many matches with one object from the set of queryset objects (which contain one search object) in another many queryset django objects 如何从另一个许多查询集django对象的一组查询集对象(包含一个搜索对象)中找到一个对象的许多匹配项

for example, how to find the most frequent product in order products and deduce its quantity 例如,如何找到最常订购的产品并推论其数量

I apologize for such a question, I'm still noob and my brains can not so critical think 我为这个问题表示歉意,我仍然是菜鸟,我的大脑不能这么批判性地思考

order models 订单模型

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)

product models 产品型号

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

i try to do this: 我尝试这样做:

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

but it's just return all product which contain in order products, how to get count each product in orders products which matches with list of products. 但这只是返回包含订购产品的所有产品,如何计算与产品清单匹配的订购产品中的每个产品。

i have one idea how to make it but i wanna make it in one line) in one 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

It's not clear what you're asking. 不清楚你在问什么。 But that last piece of code would be expressed more naturally using defaultdict : 但是最后一段代码将使用defaultdict更自然地表达:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM