2010-03-16 19 views
0

獲得一個隨機元素我剛剛完成了Django的教程,並以我個人的項目啓動工作,但是,我似乎已經完全錯過了一些東西。我想從這個模型中隨機口號:在Django

from django.db import models 

class Slogan(models.Model): 
     slogan = models.CharField(max_length=200) 

而且在這個視圖返回它:

from django.http import HttpResponse 
from swarm.sloganrotator.models import Slogan 

def index(request): 
     return HttpResponse(Slogan.objects.order_by('?')[:1]) 

然而,鑑於剛剛返回「的口號對象。然後我想,也許我可以通過簡單地將.slogan附加到切片來訪問標語字符串本身,但是這給我一個錯誤,指出我擁有的對象實際上是一個QuerySet,並且沒有屬性標語。

我顯然誤解了一些關於Django的在這裏,但它只是不落入地方我。任何幫助?

回答

3

好吧,兩件事。

首先,一個Django模型實例的默認字符串表示爲「MODELNAME對象」。要改變這個,在類上定義一個__unicode__方法 - 在你的情況下,你只是想讓它返回self.slogan。

其次,你的片是一個QuerySet,因爲這是你問什麼用[:1] - 即「返回包含所有元素的列表高達元件1」。如果你只是想要一個元素,你應該使用[0]

+0

非常感謝你,我知道了。 :) – Sarah 2010-03-16 11:18:31

2

切片是錯誤的。 [:1]會生成一個列表,其中包含一個元素(第一個元素),但您可能需要第一個沒有列表的元素。

slogan = Slogan.objects.order_by('?')[0].slogan 
+0

也是一個很好的答案,對不起,我不能標記你們兩個。 – Sarah 2010-03-16 11:18:00