我刚刚完成了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的事情,但它并不适合我。有什么帮助吗?
答案 0 :(得分:3)
好的,有两件事。
首先,Django模型实例的默认字符串表示形式是“Modelname object”。要更改此方法,请在类上定义__unicode__
方法 - 在您的情况下,您只希望它返回self.slogan。
其次,您的切片是一个查询集,因为这是您[:1]
所要求的 - 即“返回包含元素1之前的所有元素的列表”。如果您只想要一个元素,则应使用[0]
。
答案 1 :(得分:2)
切片是错误的。 [:1]
生成一个列表,其中包含一个元素(第一个),但您可能希望第一个元素没有列表。
slogan = Slogan.objects.order_by('?')[0].slogan