Omawiany błąd jest spowodowany próbą uzyskania dostępu do Manager
modelu 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, Manager
czy 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ś topic
zmienną, tak że w końcu wskażesz wystąpienie topic
modelu 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? objects
jest Manager
dostępny na poziomie klasy, a nie dla instancji. Szczegółowe informacje można znaleźć w dokumentacji dotyczącej pobierania obiektów . Wycena pieniędzy:
Managers
są 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 Topic
zamiast 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> instances
jest bardzo specyficzny, jestem w stanie zaoferować rozwiązanie, błąd może nie zawsze być tak oczywisty.
topic
wydaje się, że jest to rzeczywista klasa modelu, a nie instancja zgodnie z dostarczonym przez niego kodem.