Omawiany błąd jest spowodowany próbą uzyskania dostępu do Managermodelu za pośrednictwem instancji modelu. Użyłeś dolne liter nazwy klas. To sprawia, że trudno powiedzieć, czy błąd jest spowodowany przez instancję uzyskującą dostęp do pliku, Managerczy nie. Ponieważ inne scenariusze, które mogą powodować ten błąd, są nieznane, wychodzę z założenia, że w jakiś sposób pomieszałeś topiczmienną, tak że w końcu wskażesz wystąpienie topicmodelu zamiast klasy.
Ta linia jest winowajcą:
forum.topic_count = topic.objects.filter(forum = forum).count()
Musisz użyć:
forum.topic_count = Topic.objects.filter(forum = forum).count()
Co się dzieje? objectsjest Managerdostępny na poziomie klasy, a nie dla instancji. Szczegółowe informacje można znaleźć w dokumentacji dotyczącej pobierania obiektów . Wycena pieniędzy:
Managerssą dostępne tylko za pośrednictwem klas modelu, a nie z instancji modelu, aby wymusić oddzielenie operacji „na poziomie tabeli” od operacji „na poziomie rekordu”.
(Podkreślenie dodane)
Aktualizacja
Zobacz komentarze @Daniel poniżej. Dobrym pomysłem jest (nie, MUSISZ: P) używać wielkich liter w nazwach klas. Na przykład Topiczamiast topic. Nazwy twoich klas powodują pewne zamieszanie, niezależnie od tego, czy odnosisz się do instancji, czy do klasy. Ponieważ Manager isn't accessible via <model> instancesjest bardzo specyficzny, jestem w stanie zaoferować rozwiązanie, błąd może nie zawsze być tak oczywisty.
topicwydaje się, że jest to rzeczywista klasa modelu, a nie instancja zgodnie z dostarczonym przez niego kodem.