微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Django 的 ORM 提取随机记录?

如何解决如何使用 Django 的 ORM 提取随机记录?

使用order_by('?')将在生产的第二天杀死数据库服务器。更好的方法类似于从关系数据库中获取随机行中描述的方法

from django.db.models.aggregates import Count
from random import randint

class PaintingManager(models.Manager):
    def random(self):
        count = self.aggregate(count=Count('id'))['count']
        random_index = randint(0, count - 1)
        return self.all()[random_index]

解决方法

我有一个模型代表我在我的网站上展示的画作。在主网页上,我想展示其中的一些:最新的、大部分时间未访问的、最受欢迎的和随机的。

我正在使用 Django 1.0.2。

虽然使用 django 模型很容易提取其中的前 3 个,但最后一个(随机)给我带来了一些麻烦。在我看来,我可以将其编码为如下所示:

number_of_records = models.Painting.objects.count()
random_index = int(random.random()*number_of_records)+1
random_paint = models.Painting.get(pk = random_index)

它看起来不像我想要的东西 -
这完全是数据库抽象的一部分,应该在模型中。另外,在这里我需要处理已删除的记录(然后所有记录的数量不会涵盖我所有可能的键值)以及可能还有很多其他事情。

任何其他选项我可以如何做到这一点,最好是在模型抽象中以某种方式?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。