Часто встречающиеся ошибки и их решение
Обновлено: 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 или не была выполнена перезагрузка конфигурации приложений.
Решение:
- Убедитесь, что модуль установлен корректно
- Проверьте, что файл
apps.pyобновлен с правильнымname - Перезапустите сервер 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.
Решение:
- Убедитесь, что в
apps.pyуказанlabel:
python
class YourModuleConfig(AppConfig):
name = 'your_module_name'
label = 'your_module_name' # ⚠️ ОБЯЗАТЕЛЬНО
- Убедитесь, что в Meta классах всех моделей указан
app_label:
python
class YourModel(models.Model):
class Meta:
app_label = 'your_module_name' # ⚠️ ОБЯЗАТЕЛЬНО
- Убедитесь, что в миграциях указан
app_label:
python
class Migration(migrations.Migration):
app_label = 'your_module_name' # ⚠️ ОБЯЗАТЕЛЬНО
- Пересоберите архив модуля и переустановите его
Ошибка: "TemplateDoesNotExist at /module-url/"
Причина: Django не может найти шаблоны модуля. Это может происходить, если:
- Шаблоны не находятся в правильной папке
- Путь к шаблонам не добавлен в
TEMPLATES['DIRS'] - Неправильно указан путь к шаблону в
views.py
Решение:
- Убедитесь, что шаблоны находятся в папке
templates/{module_name}/:
templates/
└── your_module_name/
└── your_template.html
- Убедитесь, что в
views.pyуказан полный путь к шаблону:
python
template_name = 'your_module_name/your_template.html'
- Перезапустите сервер Django - система автоматически добавит пути к шаблонам при старте
- Если проблема сохраняется, проверьте, что модуль установлен и активен
Ошибка: "ProgrammingError: relation 'modules_{model_name}' does not exist"
Причина: Django неправильно определяет app_label для моделей, что приводит к использованию неправильного имени таблицы.
Решение:
- Убедитесь, что в
apps.pyуказанlabel:
python
label = 'your_module_name' # Должно совпадать с app_name из module.json
- Убедитесь, что в Meta классах всех моделей указан
app_label:
python
class Meta:
app_label = 'your_module_name' # Должно совпадать с app_name из module.json
- Пересоберите архив модуля и переустановите его
Использование 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)
Система автоматически обрабатывает это в валидаторах, но при создании собственного кода модуля следите за этим.