Команда управления djagno как пакет?

Я пытаюсь создать структуру каталогов для моих пользовательских команд Django.

Согласно учебнику Django команды создаются как модули в каталоге management/commands. например. management/commands/closepoll.py

У меня много команд, поэтому я пытаюсь разделить их на пакеты. Я хочу иметь структуру пакета, например:
management/commands/closepoll/closepoll.py <-- содержит класс Command.
management/commands/closepoll/closepoll_utils.py
management/commands/closepoll/__init__.py

Попробовал, но Django не распознает команду.

Это невозможно, так как Django ищет только в каталоге команд, как мы можем видеть из исходного кода [GitHub]:

return [
    name
    for _, name, is_pkg in pkgutil.iter_modules([command_dir])
    if not is_pkg and not name.startswith("_")
]

Что вы можете сделать, так это иметь класс Command в каталоге "commands", а остальные части могут быть в пакете:

managment/
├─ __init__.py
├─ commands/
│  ├─ __init__.py
│  ├─ closepoll.py
│  ├─ closepoll_utils/
│  │  ├─ __init__.py

В случае приведенного выше примера closepoll.py будет иметь класс Command, а то, что вы имели в closepoll_utils.py, будет в closepoll_utils/__init__.py. На самом деле вы даже можете иметь класс Command в своем пакете и просто импортировать его в closepoll.py.

Вернуться на верх