2016-09-29 1 views
-1

Ich versuche __str__ Funktion für die Modelle A und D für den Zweck mit lesbaren Text auf der Verwaltungsseite zu definieren. Das Problem liegt in der __str__ Funktion des Modells D, wo __str__ ein many_to_one verwandtes Feld zurückgibt, es gibt das Format nicht wie beabsichtigt zurück, sondern es zeigt nur das Standard 'D Objekt'.Django __str__ Funktion auf viele zu einem Feld liefert nicht die richtige Ausgabe

class A(models.Model): 
    b = models.CharField(max_length = 32) 
    c = models.CharField(max_length = 32) 

    def __str__(self): 
     return '%s %s' % (self.b, self.c) 

class D(models.Model): 
    e = models.ForeignKey(A) 

    def __str_(self): 
     return '%s %s' % (self.e.b, self.e.c) 
+1

Also was * kehrt * zurück? –

+0

zeigt 'D-Objekt' in Admin-Site – JTheboss

+0

Verwenden Sie Python 2 oder 3? Überprüfen Sie, ob der Einzug in Ihrem tatsächlichen Code korrekt ist. – Alasdair

Antwort

1

Sie haben einen Tippfehler in Ihrem Methodennamen. Sie haben __str_() geschrieben, wenn es __str__() sein sollte. Wenn Sie also in Ihrem Modell str() aufrufen, ruft es die geerbte Methode __str__() von der übergeordneten Klasse auf.

+0

Ich dachte, Python würde mir einen Tippfehler geben. Ich habe versucht _____________str_____ und es war immer noch gültige Syntax. Warum und wie macht Python das? – JTheboss

+0

Python gibt keinen Fehler, da dies alle gültigen Methodennamen sind. Wenn Sie jedoch eine Methode überschreiben möchten, muss sie genauso benannt sein wie die Methode in der übergeordneten Klasse. – Soviut

Verwandte Themen