- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个产品列表模型,想知道这个模型的具体价格的排名。
sorted_product_list = Product.objects.all().order_by('-price')
my_product = {'id': 10, 'price': 20000}
django 有 RowNum
类,但不支持 mysql我只有一个想法,那就是使用 enumerate
for rank, element in enumerate(sorted_product_list):
if element.id == my_product.id:
my_product_rank = rank
还有其他解决办法吗?
最佳答案
我们可以通过计算
具有更高 的
(所以先来的),所以:Product
数量来获得rank价格
rank = Product.objects.filter(price__gt=myproduct['price']).count()
或者如果我们事先不知道价格,我们可以先获取价格:
actual_price = Product.objects.values_list('price', flat=True).get(id=myproduct['id'])
rank = Product.objects.filter(price__gt=actual_price).count()
因此,我们可以过滤该行上方的行数,然后计算它,而不是“生成”一个表。
请注意,如果多个 Product
具有相同的价格,我们将采用这些Product中最小的排名
因此,如果有四种价格分别为 200 美元、100 美元、100 美元和 50 美元的产品,那么价格为 100 美元的 Product
都将具有排名 1
。价格为 50 美元的 Product
的排名为 3
。从某种意义上说,这是合乎逻辑的,因为这些产品之间没有“内部排名”:数据库可以自由地以任何它想要的方式返回这些产品。
假设在 price
列上有一个索引(并且它是一个二叉树),这应该会很快。因此,查询将不会从数据库中获取元素。
如果内部排名很重要,我们可以使用一种方法,首先确定“外部排名”,然后遍历Product
具有相同的价格来确定“内部 排名”,但请注意,这没有多大意义,因为在两次查询之间,此“内部订单”可能会发生变化:
# rank that also takes into account *equal* prices, but *unstable*
actual_price = Product.objects.values_list('price', flat=True).get(id=myproduct['id'])
rank = Product.objects.filter(price__gt=actual_price).count()
for p in Product.objects.filter(price=actual_price):
if p.id != myproduct['id']:
rank += 1
else:
break
因此,我们在未找到产品时继续递增,如果找到,我们将停止迭代并获得排名。
关于mysql - 我想知道 Django 查询集中的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51927718/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!