content types AttributeError: 'NoneType' object has no attribute '_base_manager'

6 января 2022 г. 4:54

  ...
  File "/project/core/views/others.py", line 46, in tag_page
    obj = item.content_object
  File "/project/env/lib/python3.8/site-packages/django/contrib/contenttypes/fields.py", line 241, in __get__
    rel_obj = ct.get_object_for_this_type(pk=pk_val)
  File "/project/env/lib/python3.8/site-packages/django/contrib/contenttypes/models.py", line 175, in get_object_for_this_type
    return self.model_class()._base_manager.using(self._state.db).get(**kwargs)
AttributeError: 'NoneType' object has no attribute '_base_manager'

Данная ошибка связана с тем, что django приложение contenttypes не может определить content_object по названию модели и приложения в таблице данных django_content_type. Такая ошибка может появится после изменения имени приложения (напр., у вас было приложение students, а вы поменяли его на school). И если у вас в моделях есть поля типа GenericForeignKey, то content_type (а точнее content_type_id) может ссылаться на устаревшую запись в таблице django_content_type.

Есть в django команда очищающие старые записи content_type. Но прежде всего нужно поправить данные в ваших таблицах. Это можно сделать, например, так:

from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get(app_label='your_new_app', model='your_model')

for obj in MyModel.objects.all():
    obj.content_type_id = content_type.id
    obj.save(update_fields=('content_type_id', ))

your_new_app - имя вашего изменённого приложения. 

Когда все данные поправлены, можно воспользоваться командой:

python manage.py remove_stale_contenttypes --include-stale-apps

При обнаружении устаревшего content_type вас каждый раз будут спрашивать согласие на удаление - внимательно посмотрите, какие объекты будут удалены, и если они не трогают ваши данные, вводите yes.

Устаревшие content_type часто связаны с устаревшими permissions, поэтому их удаление безопасно.

Оцените статью

0 из 5 (всего 0 оценок)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/content-types-attributeerror-nonetype-object-has-no-attribute/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/content-types-attributeerror-nonetype-object-has-no-attribute/">https://vivazzi.pro/ru/it/content-types-attributeerror-nonetype-object-has-no-attribute/</a>

Больше: Правила использования сайта

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

Комментарии: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц