El error en cuestión se produce cuando intenta acceder al Managerde un modelo a través de una instancia del modelo. Ha utilizado nombres de clases en minúsculas . Esto hace que sea difícil decir si el error es causado por una instancia que accede Managero no. Dado que se desconocen otros escenarios que pueden causar este error, procedo asumiendo que de alguna manera ha mezclado la topicvariable para que termine apuntando a una instancia del topicmodelo en lugar de la clase.
Esta línea es la culpable: 
forum.topic_count = topic.objects.filter(forum = forum).count()
Tienes que usar:
forum.topic_count = Topic.objects.filter(forum = forum).count()
¿Qué va mal? objectsestá Managerdisponible a nivel de clase, no para las instancias. Consulte la documentación para recuperar objetos para obtener más detalles. Cotización de dinero:
  Managersson accesibles solo a través de clases de modelo, en lugar de instancias de modelo, para imponer una separación entre las operaciones de "nivel de tabla" y las operaciones de "nivel de registro".
(Énfasis añadido)
Actualizar
Vea los comentarios de @Daniel a continuación. Es una buena idea (no, DEBE: P) usar mayúsculas y minúsculas para los nombres de las clases. Por ejemplo, en Topiclugar de topic. Los nombres de sus clases causan cierta confusión ya sea que se refiera a una instancia o una clase. Dado que el Manager isn't accessible via <model> instanceses muy específico, puedo ofrecer una solución. El error puede no ser tan evidente siempre.
     
                
topicparece ser la clase de modelo real, y no una instancia según el código que proporcionó.Manager isn't accessible via Foo instancessolo es posible cuando intentas acceder aManageruna instancia. Vea el código fuente: code.djangoproject.com/svn/django/trunk/django/db/models/…topiccomo una variable de instancia local y eliminando la referencia a la clase.topic.model_class().objectstopic.__class__.objects. Parece que lomodel_class()mencionado por @Nimo arriba no funcionatopic.__class__.objects.get(id=topic_id)fuente
__class__funciona mejor para métodos dentro de modelos abstractos, ya que no conocemos el nombre real de la clase descendiente. En esta situación, he usadoself.__class__.objects.getPara django <1.10
topic._default_manager.get(id=topic_id)Aunque no deberías usarlo así. El _default_manager y _base_manager son privados, por lo que se recomienda usarlos solo si está dentro del modelo Topic, como cuando desea usar el Administrador en una función propietaria, digamos:
class Topic(Model): . . . def related(self) "Returns the topics with similar starting names" return self._default_manager.filter(name__startswith=self.name) topic.related() #topic 'Milan wins' is related to: # ['Milan wins','Milan wins championship', 'Milan wins by one goal', ...]fuente
topic.__class__.objects.get(id=topic_id).self.__class__.objectsfunciona el truco según tu otra respuesta.También podría ser causado por un par de paréntesis demasiado, p. Ej.
ModelClass().objects.filter(...)en lugar de la correcta
ModelClass.objects.filter(...)A veces me pasa cuando bpython (o un IDE) agrega automáticamente paréntesis.
El resultado, por supuesto, es el mismo: tiene una instancia en lugar de una clase.
fuente
si el tema fuera una instancia de ContentType (que no lo es), esto habría funcionado:
topic.model_class().objects.filter(forum = forum)fuente
model_class()es un método delContentTypemodelo. Otras instancias de modelo, incluidastopic, no tienen unmodel_classmétodo.Acabo de tener un problema similar a este error. Y mirando hacia atrás en su código, parece que también podría ser su problema. Creo que su problema es que su comparación de "id" con "int (topic_id)" y topic_id no está establecida.
def test(request, post_id): post = topic.objects.get(id = int(topic_id)) post.delete()Supongo que su código debería usar "post_id" no "topic_id"
def test(request, post_id): post = topic.objects.get(id = int(post_id)) post.delete()fuente