Менеджер: перезагрузка

Долго искал блуждающую багу в приложении на django: в какой-то момент функция get_object_or_404 начала выдавать ошибку AttributeError: 'list' object has no attribute 'model'. В принципе понятно, что где-то вместо модели вылезает список (list), но где и почему,- непонятно. Гугление результатов не дало,- конкретно такой ошибки, похоже, ни у кого не возникало, поэтому пришлось копаться до тех пор, пока не снизошло озарение. Оказалось всё просто: get_object_or_404() неявно вызывает метод all() стандартного менеджера моделей models.Manager. А у меня хватило ума переопределить этот метод в свойм кастомном менеджере, и не просто переопределить,- у меня он выполнял совсем другие задачи. Переименование метода в get_all() вернуло всё на своё место.

Полный список методов, которые не надо случайно переопределять, можно посмотреть в онлайн-трекере Django, начиная со строки class Manager(object):

Комментарии

Популярные сообщения