【问题标题】:how to find much matches of one objects from one queryset in another queryset Django?如何在另一个查询集 Django 中从一个查询集中找到一个对象的多个匹配项?
【发布时间】:2018-03-27 04:17:36
【问题描述】:

如何在另一个许多queryset django对象中从一组queryset对象(包含一个搜索对象)中找到一个对象的许多匹配项

例如,如何在订单产品中找到最频繁的产品并推断其数量

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

订购型号

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

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    不清楚你在问什么。但是最后一段代码使用defaultdict 会更自然地表达:

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

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多