Главная Документация Руководство разработчика модулей Часто встречающиеся ошибки и их решение

Поиск

Релиз

Содержание

Нужна помощь?

Не нашли ответ на свой вопрос? Свяжитесь с нашей службой поддержки.

Обратиться в поддержку

Часто встречающиеся ошибки и их решение

Обновлено: 07 Декабрь 2025 Версия: 2.2

Ошибка: "sequence item 0: expected str instance, proxy found"

Причина: В валидаторе используются объекты gettext_lazy для сообщений об ошибках, которые не могут быть напрямую объединены в строку.

Решение: Система автоматически преобразует все ошибки в строки перед объединением. Если вы создаете свой валидатор, убедитесь, что все сообщения об ошибках преобразуются в строки перед использованием в join():

error_strings = [str(error) for error in errors]
error_message = ', '.join(error_strings)

Ошибка: "No installed app with label 'module_name'"

Причина: Модуль не был правильно добавлен в INSTALLED_APPS или не была выполнена перезагрузка конфигурации приложений.

Решение:

  1. Убедитесь, что модуль установлен корректно
  2. Проверьте, что файл apps.py обновлен с правильным name
  3. Перезапустите сервер Django

Ошибка: "column modules_module.is_local does not exist"

Причина: Миграция для добавления поля is_local не была применена.

Решение: Выполните миграции:

python manage.py migrate modules

Ошибка: "module.json not found in ZIP archive"

Причина: В ZIP архиве отсутствует файл module.json в корне или в подпапке модуля.

Решение: Убедитесь, что файл module.json находится в корне ZIP архива или в папке с именем модуля.

Ошибка: "Module configuration is invalid"

Причина: Файл module.json содержит ошибки валидации.

Решение: Проверьте:

  • Наличие всех обязательных полей (name, code, version, settings)
  • Правильность структуры JSON
  • Наличие обязательного поля app_name в секции settings
  • Правильность типов данных для всех полей

Ошибка: "relation 'modules_{model_name}' does not exist" или "relation '{app_name}_{model_name}' does not exist"

Причина: В моделях не указан app_label в Meta классе, или в apps.py не указан label.

Решение:

  1. Убедитесь, что в apps.py указан label:

python class YourModuleConfig(AppConfig): name = 'your_module_name' label = 'your_module_name' # ⚠️ ОБЯЗАТЕЛЬНО

  1. Убедитесь, что в Meta классах всех моделей указан app_label:

python class YourModel(models.Model): class Meta: app_label = 'your_module_name' # ⚠️ ОБЯЗАТЕЛЬНО

  1. Убедитесь, что в миграциях указан app_label:

python class Migration(migrations.Migration): app_label = 'your_module_name' # ⚠️ ОБЯЗАТЕЛЬНО

  1. Пересоберите архив модуля и переустановите его

Ошибка: "TemplateDoesNotExist at /module-url/"

Причина: Django не может найти шаблоны модуля. Это может происходить, если:

  • Шаблоны не находятся в правильной папке
  • Путь к шаблонам не добавлен в TEMPLATES['DIRS']
  • Неправильно указан путь к шаблону в views.py

Решение:

  1. Убедитесь, что шаблоны находятся в папке templates/{module_name}/:

templates/ └── your_module_name/ └── your_template.html

  1. Убедитесь, что в views.py указан полный путь к шаблону:

python template_name = 'your_module_name/your_template.html'

  1. Перезапустите сервер Django - система автоматически добавит пути к шаблонам при старте
  2. Если проблема сохраняется, проверьте, что модуль установлен и активен

Ошибка: "ProgrammingError: relation 'modules_{model_name}' does not exist"

Причина: Django неправильно определяет app_label для моделей, что приводит к использованию неправильного имени таблицы.

Решение:

  1. Убедитесь, что в apps.py указан label:

python label = 'your_module_name' # Должно совпадать с app_name из module.json

  1. Убедитесь, что в Meta классах всех моделей указан app_label:

python class Meta: app_label = 'your_module_name' # Должно совпадать с app_name из module.json

  1. Пересоберите архив модуля и переустановите его

Использование gettext_lazy в модулях

Важно: При использовании gettext_lazy в модулях убедитесь, что все строки преобразуются в обычные строки перед объединением или форматированием:

from django.utils.translation import gettext_lazy as _

# ❌ Неправильно:
errors = [_('Error 1'), _('Error 2')]
message = ', '.join(errors)  # Ошибка: expected str instance, __proxy__ found

# ✅ Правильно:
errors = [_('Error 1'), _('Error 2')]
error_strings = [str(error) for error in errors]
message = ', '.join(error_strings)

Система автоматически обрабатывает это в валидаторах, но при создании собственного кода модуля следите за этим.