Django Models 随机获取指定数量数据方法

用户头像
Young先生
关注
发布于: 2020 年 07 月 21 日
Django Models随机获取指定数量数据方法

方法一:新增models的Manager方法

下面就直接发代码了

class RandomManager(models.Manager):
def get_queryset(self):
return super(RandomManager, self).get_queryset().order_by('?')



使用的时候



class TrainWord(models.Model):
'''
User train word
'''
word = models.CharField(max_length=32)
randoms = RandomManager()
def __unicode__(self):
return self.word



数据展示时:

words = TrainWord.randoms.all()[count]



这种方式,是自己定义了一个Models的manager方法,任何一个models都可以使用此方法,具有通用性。



方法二:查询数据时,通过order_by('?')实现



实现代码:

Content.objects.all().order_by('?')[:100]



我们可以看到这段代码就是方法一中重写Models的Manager的核心代码,都是通过models的order_by('?')来实现随机获取数据中的数据,在通过切片,实现获得指定大小的数据内容。



注意:



以上两种方法都存在性能瓶颈,当数据库中的数据足够大的时候,就会响应特别慢。官网也不建议这么做。

具体的解释,可以看看此篇文章对于order_by('?')的讲解:https://stackoverflow.com/questions/1731346/how-to-get-two-random-records-with-django/6405601#6405601



方案三:通过随机数,来获取随机的数据



代码:

import random
last = MyModel.objects.count() - 1
index1 = random.randint(0, last)
index2 = random.randint(0, last - 1)
if index2 == index1: index2 = last
MyObj1 = MyModel.objects.all()[index1]
MyObj2 = MyModel.objects.all()[index2]



发布于: 2020 年 07 月 21 日 阅读数: 27
用户头像

Young先生

关注

Python工程师/书虫/极客/ 2020.04.22 加入

伸手摘星,即使徒劳无功,也不至于满手泥污。 欢迎大家访问我的BigYoung小站(bigyoung.cn)

评论

发布
暂无评论
Django Models随机获取指定数量数据方法