Работа с несколькими приложениями, переопределяющими команды управления в Django - PullRequest
9 голосов
/ 29 декабря 2011

У меня проблема с несколькими приложениями, пытающимися переопределить одну и ту же команду управления в проекте Django.

  1. Есть ли разумные способы справиться с этим?
  2. Что получает приоритет - приложение, которое было определено первым в INSTALLED_APPS, или приложение, которое было определено последним?
  3. Возможно ли эффективно разделить на подклассы последнюю определенную команду управления, а не просто заменить ее?

Для контекста я пытаюсь заставить django_pdb (см. github ) работать более хорошо с south и django.contrib.staticfiles.

Ответы [ 2 ]

3 голосов
/ 11 августа 2014

2,5 года спустя, но на тот случай, если у кого-то возникнет та же проблема, и он попадет сюда после поиска в Google, я сделал небольшое приложение django для этого случая: django-mcmo ('Multiple Override команды управления'), доступнона pypi .Он имеет ограничения, но работает, как и ожидалось.

Работает с django 1.4 до 1.8 и py 2 и 3, вклад приветствуется на bitbucket repo .

1 голос
/ 29 декабря 2011

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

Для моих проектов мне нравится иметь:

/myproject
  /lib
    /app1
    /app2
    /app3

Затем явно добавьте / lib к пути в setup.py

import os
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))

import sys
lib_dir = os.path.join(PROJECT_PATH, 'lib')
if lib_dir not in sys.path[:4]:
    sys.path.insert(1, os.path.join(PROJECT_PATH, 'lib'))

Я, вероятно, гораздо чаще, чем в среднем, беру приложение, устанавливаю его, а затем меняю 10%, чтобы оно работало именно так, как я хочу.

Преимущество этого состоит в том, что: 1) большинство зависимостей поставляются с кодом и отслеживаются в GIT 2) нет шансов для общесистемного изменения, которое может неожиданно вызвать ошибки в приложении, если вы запускаете несколько приложений с одного компьютера, и 3 ) Легко изменить, с историей изменений, любой и все в приложении.

Не имея слишком глубокого понимания команд управления юга и никогда не использовав django_pdb, ваша конкретная проблема может быть не решена с помощью подхода «сделать локальное копирование и переименовать одну из них», но я поделюсь, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...