在Django中获取随机元素

时间:2010-03-16 11:08:15

标签: 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对象'。然后我想,也许我可以通过简单地将.slogan附加到切片来访问标语字符串本身,但是这给了我一个错误,表明我拥有的对象实际上是一个QuerySet并且没有属性口号。

我显然在这里误解了一些关于Django的事情,但它并不适合我。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

好的,有两件事。

首先,Django模型实例的默认字符串表示形式是“Modelname object”。要更改此方法,请在类上定义__unicode__方法 - 在您的情况下,您只希望它返回self.slogan。

其次,您的切片是一个查询集,因为这是您[:1]所要求的 - 即“返回包含元素1之前的所有元素的列表”。如果您只想要一个元素,则应使用[0]

答案 1 :(得分:2)

切片是错误的。 [:1]生成一个列表,其中包含一个元素(第一个),但您可能希望第一个元素没有列表。

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