3

我有一个像下面这样的模型

Class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.IntegerField()

所以假设我们4 product在数据库中有记录,是否有办法检查所有 4 条产品记录是否都有same price

我不想遍历所有产品,因为thousands数据库中可能有产品记录,这样做会成为性能问题。

所以我正在寻找类似使用内置 django 数据库 ORM 来做到这一点

check_whether_all_the_product_records_has_same_price_value = some django ORM operation......

if check_whether_all_the_product_records_has_same_price_value:
    # If all the Product table records(four) has the same price value 
    # return the starting record
   return check_whether_product_has_same_price_value(0)

那么有人可以让我知道我们该怎么做吗?

4

2 回答 2

5

可以建议您使用计数线filter

if Product.objects.all().count() == Product.objects.filter(price=price).count():
    pass

或使用distinct

if Product.objects.all().products.distinct('price').count() == 1:
    pass

请注意,此示例仅适用于 Portgres。

你也可以annotate用来计算我认为的计数

if Product.objects.all().values('price').annotate(Count('price')).count() == 1:
    pass
于 2013-10-30T10:08:20.083 回答
0

您可以使用 distinct 来查找唯一价格:

products = Product.objects.filter([some condition])
prices = products.values_list('price', flat=True).distinct()

然后检查价格的长度。

于 2013-10-30T10:07:13.583 回答