如何使用django查询检查数据库字段的所有值是否相同

时间:2013-10-30 09:57:32

标签: python django orm django-queryset

我有一个类似下面的模型

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)

所以有人可以告诉我们我们怎么做?

2 个答案:

答案 0 :(得分:1)

可以建议您使用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

答案 1 :(得分:0)

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

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

然后检查价格的长度。