Der betreffende Fehler wird verursacht, wenn Sie versuchen, Manager
über eine Instanz des Modells auf das Modell zuzugreifen . Sie haben Klassennamen in Kleinbuchstaben verwendet. Dies macht es schwierig zu sagen, ob der Fehler durch eine Instanz verursacht wird, die auf die zugreift Manager
oder nicht. Da andere Szenarien, die diesen Fehler verursachen können, unbekannt sind, gehe ich davon aus, dass Sie die topic
Variable irgendwie verwechselt haben , sodass Sie am Ende auf eine Instanz des topic
Modells anstatt auf die Klasse verweisen .
Diese Linie ist der Schuldige:
forum.topic_count = topic.objects.filter(forum = forum).count()
Sie müssen verwenden:
forum.topic_count = Topic.objects.filter(forum = forum).count()
Was läuft falsch? objects
ist Manager
auf Klassenebene verfügbar, nicht für die Instanzen. Weitere Informationen finden Sie in der Dokumentation zum Abrufen von Objekten . Geldzitat:
Managers
sind nur über Modellklassen und nicht über Modellinstanzen zugänglich , um eine Trennung zwischen Operationen auf Tabellenebene und Operationen auf Datensatzebene zu erzwingen.
(Betonung hinzugefügt)
Aktualisieren
Siehe die Kommentare von @Daniel unten. Es ist eine gute Idee (nein, Sie MÜSSEN: P), die Groß- und Kleinschreibung für Klassennamen zu verwenden. Zum Beispiel Topic
statt topic
. Ihre Klassennamen führen zu Verwirrung, unabhängig davon, ob Sie sich auf eine Instanz oder eine Klasse beziehen. Da das Manager isn't accessible via <model> instances
sehr spezifisch ist, kann ich eine Lösung anbieten. Der Fehler ist möglicherweise nicht immer so selbstverständlich.
topic
scheint jedoch die tatsächliche Modellklasse zu sein und keine Instanz gemäß dem von ihm bereitgestellten Code.