Django Models隨機獲取指定數量資料方法
阿新 • • 發佈:2020-07-23
方法一:新增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小站