Джанго: Как получить строку из объекта CharField? - PullRequest
2 голосов
/ 20 июля 2010

У меня есть модель Django, которая, по сути, представляет собой список слов. Это очень просто и определяется следующим образом:

class Word(models.Model):
    word = models.CharField(max_length=100)

Мне нужно конкретное слово как строковый объект. (Я заменяю все символы в слове звездочками для простой игры Hangman.) Однако я не могу получить слово как строковый объект.

Я пытался добавить этот метод в класс Word, но, похоже, это тоже не сработало.

def __str__(self):
    return str(self.word)

Вместо слова я получаю пустой строковый объект.

Что мне нужно сделать, чтобы получить значение CharField в виде строкового объекта? Спасибо за вашу помощь.

Edit: странная вещь для меня в том, что у него нет проблем с возвратом целого числа. Например, если бы я сделал что-то вроде этого:

word = Word(pk=2821)
print word.id

... будет напечатано 2821, идентификатор этой конкретной записи.

1 Ответ

1 голос
/ 20 июля 2010

Вы уверены, что правильно выбираете объекты Word? Строка в вашем примере word = Word(pk=2821) создает новый объект Word с pk 2821 и пустым полем word. Если вы извлекли фактический Word объект из базы данных, который имеет значение в поле word, то word.word должен вернуть строку. Э.Г.

>>>> w1 = Word(pk=5, word='eggs')
>>>> w1.word
'eggs'
>>>> w1.save()
>>>> w2 = Word.objects.get(pk=5)
>>>> w2.word
u'eggs'

Можете ли вы также убедиться, что слова правильно хранятся в вашей базе данных, подключившись к ней с помощью клиента БД и просмотрев вывод:

SELECT word FROM yourappname_word LIMIT 20;

Как я уже сказал, word.word должен работать, поэтому проблема может заключаться в том, как вы сохраняете или извлекаете свои Word объекты.

...