Класс Django Model
определяет метод __repr__
, который объединяет имя класса модели со строковым представлением экземпляра, так что типичный объект будет отображаться в оболочке или в средствах отладки в следующем формате:Получить Django для включения идентификатора модели в строковое представление всех экземпляров модели для отладки
<MyClass: string description of instance>
То, что я хочу, чтобы все мои объекты экземпляров, чтобы показать их идентификаторы в их __repr__
, например,
Это для удобства отладки.
Теперь было бы довольно легко (в принципе) переопределить методы __unicode__
(которые генерируют строковое описание экземпляров), чтобы включить идентификаторы или, если на то пошло, переопределить мои методы __repr__
(или иметь всю мою модель классы производятся из базового класса, который делает это).
Однако я работаю с существующей базой кода и хочу избежать изменения всех существующих определений классов модели для этого. Быстрый и грязный способ изменить ситуацию - отредактировать исходный код для __repr__
в классе модели Django. Но это создает проблемы с развертыванием, так как мой проект всегда развертывает сторонние библиотеки, такие как Django from pip.
Итак: как я могу заставить Django включать идентификатор в список для всех экземпляров объектов, не изменяя исходный код Django или определения класса модели проекта?
ПРИМЕЧАНИЕ: Я думаю, что какой-то патч обезьяны до Model.__repr__
должен сделать трюк, но я не уверен, что это сработает, и если да, то где в моем проекте Django это сделать.
Я не мог заставить его работать, включив его в свой файл настроек из-за некоторых зависимостей импорта, но он работает, включив его в файл models.py одного из моих приложений. (Приложения загружаются Django, включая файлы models.py после загрузки настроек). – Ghopper21