下面就直接發**了
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都可以使用此方法,具有通用性。
實現**:
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('?')的講解:
本文首發於bigyoung小站
Django Models 字段型別
編號 字段型別filed types描述1 autofield 如果沒有指明主鍵,就會產生乙個自增的主鍵。2bigintegerfield 64位的整型數值,從 2 63 9223372036854775808 到 2 63 1 9223372036854775807 3binaryfield 儲存...
django models欄位型別
相關 字段型別 型別 說明 autofield 自動增長的integerfield,通常不用指定,不指定時django會自動建立屬性名為id的自動增長屬性 booleanfield 布林字段,值為true或false nullbooleanfield 支援null true false三種值 cha...
Django Models欄位屬性表
v models.charfield max length none options varchar v models.emailfield max length 75,options varchar v models.urlfield verify exists true,max length 2...