方法一:增加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('?')来完成任意获得数据中的数据,在根据切片,完成得到 特定尺寸的数据內容。

留意:

之上二种方法都存有特性短板 ,当数据库文件的数据充足大的情况下 ,就会回应非常慢。

计划方案三:根据随机数字,来获得任意的数据

代码:

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]

实际的表述,能够看一下此一篇文章针对order_by('?')的解读:https://stackoverflow.com/questions/1731346/how-to-get-two-random-records-with-django/6405601#6405601

文中先发于BigYoung华明镇

文章来源于网络 ,如有侵权请联系站长QQ61910465删除
本文版权归趣快排营销www.SEOguruBLOG.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ㊣61910465