Получение случайного элемента в Django - PullRequest
0 голосов
/ 16 марта 2010

Я только что закончил учебник по 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 и не имеет атрибута слогана.

Я, очевидно, что-то не так понял о Джанго здесь, но это просто не подходит для меня. Любая помощь?

Ответы [ 2 ]

3 голосов
/ 16 марта 2010

ОК, две вещи.

Во-первых, строковое представление по умолчанию для экземпляра модели Django - «Объект имени модели». Чтобы изменить это, определите метод __unicode__ для класса - в вашем случае вы просто хотите, чтобы он возвращал self.slogan.

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

2 голосов
/ 16 марта 2010

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

slogan = Slogan.objects.order_by('?')[0].slogan
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...