Django Models隨機獲取指定數量資料方法

2021-10-08 10:48:38 字數 1197 閱讀 4381

下面就直接發**了

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...