如何从另一个查询集Django中的一个查询集中找到一个对象的多个匹配项?

时间:2017-10-15 15:40:13

标签: python django django-queryset

如何在另一个查询集django对象中查找一组查询集对象(包含一个搜索对象)中的一个对象

例如,如何在订购产品中找到最常见的产品并推断其数量

  

我为这样的问题道歉,我仍然是菜鸟,我的大脑不能   如此批判性思考

订购模型

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)

产品型号

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

我尝试这样做:

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

但它只是返回包含产品的所有产品, 如何计算与产品清单相匹配的订单产品中的每种产品。

我有一个想法如何在一个查询集中制作它,但我想在一行中制作它)

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

1 个答案:

答案 0 :(得分:0)

目前还不清楚你在问什么。但是使用defaultdict

可以更自然地表达最后一段代码
count = collections.defaultdict(int)
for order in some:
    for product in order.products_of_order.all():
        count[product.name] += 1