Трясогузка 4.1, объект "NoneType" не имеет атрибута "_inc_path"

Я пытаюсь интегрировать трясогузку в существующий проект django, но получаю указанную выше ошибку при добавлении дочерней страницы.

В моих настройках я следовал инструкциям:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.humanize',
    'whitenoise.runserver_nostatic',
    'home',
    'news',
    'wagtail.contrib.forms',
    'wagtail.contrib.redirects',
    'wagtail.embeds',
    'wagtail.sites',
    'wagtail.users',
    'wagtail.snippets',
    'wagtail.documents',
    'wagtail.images',
    'wagtail.search',
    'wagtail.admin',
    'wagtail',
    'modelcluster',
]


MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django_permissions_policy.PermissionsPolicyMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'wagtail.contrib.redirects.middleware.RedirectMiddleware',
]

адреса моего проекта:

from django.urls import include, path
from django.conf import settings
from django.conf.urls.static import static
from django.urls import reverse
from wagtail.admin import urls as wagtailadmin_urls
from wagtail import urls as wagtail_urls
from wagtail.documents import urls as wagtaildocs_urls


urlpatterns = [
    path('', include('home.urls')),
    path('news/', include('news.urls')),
    path('cms/', include(wagtailadmin_urls)),
    path('documents/', include(wagtaildocs_urls)),
    path('news/', include(wagtail_urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

мои новостные ссылки:

from django.urls import path
from .views import news_article_detail

urlpatterns = [
    path('news/<int:pk>/', news_article_detail, name='news_article_detail'),
]

в моем представлении новостей:

from django.shortcuts import render
from .models import NewsArticlePage
#import pdb; pdb.set_trace()

def news_article_detail(request, pk):
    news_article = NewsArticlePage.objects.get(pk=pk)
    return render(request, 'news/news_page.html', {'news_article': news_article})

и моя модель:

from django.db import models
from wagtail.core.models import Page
from wagtail.admin.edit_handlers import FieldPanel
from wagtail.core.fields import RichTextField

class NewsArticlePage(Page):
    article_body = RichTextField(blank=True)

    content_panels = Page.content_panels + [
        FieldPanel('article_body'),
    ]
    
    template = "news/news_page.html"

и в моем шаблоне:

{% extends "base.html" %}

{% block content %}
<h1>{{ page.title }}</h1>
{{ page.article_body|richtext }}
{% endblock %}

Я также добавил корневую страницу, убедился, что URL-адреса указывают на правильное место, выполнил миграцию и миграцию, но все равно получаю ту же ошибку. Итак, когда я перехожу к localhost/cms в бэкэнде, у меня настроена страница, когда я иду, чтобы добавить дочернюю страницу, я получаю сообщение об ошибке, я пробовал python manage.py fixtree, но я все еще получаю ошибку, вот стек след:

Окружающая среда:

Метод запроса: POST URL-адрес запроса: http://127.0.0.1:7000/cms/pages/add/news/newsarticlepage/2/

Django Version: 3.2.4
Python Version: 3.11.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'whitenoise.runserver_nostatic',
 'accounts',
 'compressor',
 'corsheaders',
 'home',
 'news',
 'taggit',
 'widget_tweaks',
 'sass_processor',
 'wagtail.contrib.forms',
 'wagtail.contrib.redirects',
 'wagtail.embeds',
 'wagtail.sites',
 'wagtail.users',
 'wagtail.snippets',
 'wagtail.documents',
 'wagtail.images',
 'wagtail.search',
 'wagtail.admin',
 'wagtail',
 'modelcluster']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django_permissions_policy.PermissionsPolicyMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'corsheaders.middleware.CorsMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'wagtail.contrib.redirects.middleware.RedirectMiddleware']



Traceback (most recent call last):
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\wagtail\admin\urls\__init__.py", line 170, in wrapper
    return view_func(request, *args, **kwargs)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\wagtail\admin\auth.py", line 182, in decorated_view
    response = view_func(request, *args, **kwargs)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\django\views\generic\base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\wagtail\admin\views\pages\create.py", line 119, in dispatch
    return super().dispatch(request)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\django\views\generic\base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\wagtail\admin\views\pages\create.py", line 132, in post
    return self.form_valid(self.form)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\wagtail\admin\views\pages\create.py", line 148, in form_valid
    return self.save_action()
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\wagtail\admin\views\pages\create.py", line 170, in save_action
    self.parent_page.add_child(instance=self.page)
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\treebeard\mp_tree.py", line 1089, in add_child
    return MP_AddChildHandler(self, **kwargs).process()
  File "C:\Users\sesa301575\sites\Django.Azure\venv\Lib\site-packages\treebeard\mp_tree.py", line 383, in process
    newobj.path = self.node.get_last_child()._inc_path()

Exception Type: AttributeError at /cms/pages/add/news/newsarticlepage/2/
Exception Value: 'NoneType' object has no attribute '_inc_path'
 

Не могли бы вы подробнее описать, что вы делаете, когда получаете это сообщение об ошибке? И включить фактическую трассировку стека?

cnk 02.02.2023 18:23

Кроме того, создание явного представления для ваших страниц с трясогузками необычно. Как правило, используется механизм обслуживания страниц Wagtail, что в вашем случае означает, что созданные вами страницы будут общедоступны по адресу example.com/news/<page_slug>.

cnk 02.02.2023 18:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

'NoneType' object has no attribute '_inc_path' обычно указывает, что внутренние поля (path, depth, numchild), определенные библиотекой django-treebeard для отслеживания количества дочерних элементов в дереве страниц, стали несогласованными. Неясно, что могло вызвать это здесь, но запуск ./manage.py fixtree должен это исправить.

Спасибо, газовщик, я попробовал ваше предложение, но все равно получаю ту же ошибку, я отредактировал свой вопрос с трассировкой стека.

Who Me Dunno Mate 02.02.2023 19:51

Как вы и предположили, в моих URL-адресах возникла путаница, у меня были оба пути («новости /», include («news.urls»)), и путь («новости /», include (wagtail_urls)), большое спасибо @газман

Who Me Dunno Mate 02.02.2023 23:43

В моих проектах мне обычно нужно запускать ./manage.py fixtree --full для решения проблем. Если это все еще не работает, на MP_Node есть метод find_problems, но нет команды управления для доступа к нему; вам нужно будет погрузиться в оболочку django, чтобы использовать его.

cnk 03.02.2023 19:01

Другие вопросы по теме

Похожие вопросы

Django выполняет предыдущее действие при обновлении
AttributeError: объект «кортеж» не имеет атрибута «модель». Как исправить эту ошибку?
Почему модуль Python Secrets продолжает генерировать одни и те же пароли в этой функции в Django
Пожалуйста, мне нужно исправить ошибку AttributeError, пожалуйста, помогите мне
Django: как написать представление на основе функции, используемое для URL с параметром
Django - Как обновить родительскую модель с помощью дочерней модели?
Как получить значение переменной из функции javascript в функцию python в django
530, b'5.7.0 Ошибка аутентификации при использовании gmail для отправки электронных писем через django
Any Я пытаюсь обновить логическое поле из другой модели. у меня есть 2 модельных курса студентов, а объект Examgrade «RelatedManager» не имеет атрибута «show»
Как добавить метод записи для представления API, чтобы сообщения можно было комментировать?