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 Manageroder nicht. Da andere Szenarien, die diesen Fehler verursachen können, unbekannt sind, gehe ich davon aus, dass Sie die topicVariable irgendwie verwechselt haben , sodass Sie am Ende auf eine Instanz des topicModells 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? objectsist Managerauf Klassenebene verfügbar, nicht für die Instanzen. Weitere Informationen finden Sie in der Dokumentation zum Abrufen von Objekten . Geldzitat:
Managerssind 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 Topicstatt 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> instancessehr spezifisch ist, kann ich eine Lösung anbieten. Der Fehler ist möglicherweise nicht immer so selbstverständlich.
topicscheint jedoch die tatsächliche Modellklasse zu sein und keine Instanz gemäß dem von ihm bereitgestellten Code.