Данная ошибка возникает, когда вы пытаетесь получить доступ к Manager
модели через экземпляр модели. Вы использовали строчные имена классов. Это затрудняет определение, вызвана ли ошибка экземпляром, обращающимся к Manager
, или нет. Поскольку другие сценарии, которые могут вызвать эту ошибку, неизвестны, я исхожу из предположения, что вы как-то перепутали переменную topic
, чтобы в итоге вы указали на экземпляр модели topic
вместо класса.
Эта строка является виновником:
forum.topic_count = topic.objects.filter(forum = forum).count()
# ^^^^^
Вы должны использовать:
forum.topic_count = Topic.objects.filter(forum = forum).count()
# ^^^^^
# Model, not instance.
Что не так? objects
- это Manager
, доступный на уровне класса, а не для экземпляров. Подробнее см. Документацию для извлечения объектов . Цитата денег:
Managers
доступны только через классы модели, а не из экземпляров модели, чтобы обеспечить разделение между операциями на уровне таблицы и операциями на уровне записи.
(выделение добавлено)
Обновление
См. Комментарии @Daniel ниже. Это хорошая идея (нет, вы ДОЛЖНЫ: P) использовать регистр заголовков для имен классов. Например, Topic
вместо topic
. Ваши имена классов вызывают некоторую путаницу, независимо от того, имеете ли вы в виду экземпляр или класс. Поскольку Manager isn't accessible via <model> instances
является очень конкретным, я могу предложить решение. Ошибка не всегда может быть настолько очевидной.