__str __ (self) w tutorialu django zwraca obiekt zamiast tekstu


Przechodzę przez samouczki Django, ale mam problemy z używaniem
__str __ (self)
.
Kiedy dodam poniższą metodę do mojego modelu:
def _str_(self):
return self.question_text

I uruchom polecenie:
Question.objects.all ()
Zwraca coś takiego:
<Question: Question object>

Ale spodziewam się, że zwróci faktyczny tekst pytania.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W rzeczywistości jest to podwójny problem. Po pierwsze, jak wspomniano,
__str__
musi używać podwójnych podkreśleń.
Drugi problem polega na tym, że drukowanie obiektu w wierszu poleceń nie wywołuje metody
__str__
. Zamiast tego używa metody
__repr__
, aby uzyskać ciąg znaków reprezentujący obiekt. Ta metoda różni się od metody
__str__
tym, że zapewnia bardziej techniczną reprezentację obiektu, często zawierającą nazwę klasy i niektóre atrybuty jednoznacznie identyfikujące obiekt (identyfikator, adres pamięci itp.). Jest to używane na przykład w śledzeniu wstecznym, aby lepiej zidentyfikować problem.
Aby uzyskać treść pytania, będziesz musiał jawnie wywołać metodę
__str__
, wywołując ją bezpośrednio lub używając metody
str (object)
. Zwróć uwagę, że wywołanie
str ()
na liście obiektów modelu wywoła metodę
__str__
z listy, która z kolei wywoła metodę
__repr__
na obiektach na liście.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Problem w tym, jak

On mówi
https://stackoverflow.com/users/3001761/jonrsharpe
jonsharp.
def _str_(self):
return self.question_text

Powinien być
def __str__(self):
return self.question_text

z dwoma podkreśleniami po lewej i dwoma po prawej
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zdarzyło mi się to, ponieważ powłoka musiała zostać zamknięta i ponownie otwarta, zanim zarejestrowała dodanie metody

str

.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

pamiętaj, aby napisać tę metodę w tej samej klasie, w której definiujesz metodę modeli
def __str__(self): return self.question_text

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się