2010-03-16 2 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 - это «объект« Имя модели ». Чтобы изменить это, определите метод __unicode__ класса - в вашем случае вы просто хотите вернуть self.slogan.

Во-вторых, ваш срез - это запрос, потому что это то, о чем вы просили, с [:1] - т.е. «вернуть список, состоящий из всех элементов до элемента 1». Если вам нужен только один элемент, вы должны использовать [0].

+0

Большое спасибо, я понял. :) – Sarah

2

Кусочек неправильный. [:1] генерирует список с одним элементом (первым) в нем, но вы хотите, вероятно, первый элемент без списка.

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

Также отличный ответ, извините, я не могу отметить вас обоих. – Sarah

Смежные вопросы