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