为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇潇雨雨 2019-12-10 10:18:57
我有一个模型,代表我在网站上展示的绘画。在主要网页上,我想展示其中的一些:最新的,大多数时间未访问的网页,最受欢迎的网页和随机的网页。我正在使用Django 1.0.2。尽管使用Django模型可以轻松提取其中的前3个,但最后一个(随机)却给我带来了麻烦。在我看来,我可以将代码进行如下编码:number_of_records = models.Painting.objects.count()random_index = int(random.random()*number_of_records)+1random_paint = models.Painting.get(pk = random_index)在我看来,这看起来并不像我想要的东西-这完全是数据库抽象的一部分,应该包含在模型中。另外,在这里,我需要处理已删除的记录(然后所有记录的数量将无法覆盖所有可能的键值)以及可能还有很多其他事情。我还有其他方法可以做,最好是在模型抽象内进行?
查看完整描述

6 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

使用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]


查看完整回答
反对 回复 2019-12-10
  • 6 回答
  • 0 关注
  • 1395 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信