Как переопределить поле модели в Django для библиотечной модели?
Мне нужно переопределить поле библиотечной модели в Django. Эта модель интегрирована в эту библиотеку и используется в ней. Изменения, которые мне нужны - это добавить уникальное ограничение к одному из полей модели. Но это не абстрактная модель, поэтому я не могу наследовать эту модель, как я понимаю.
Вопрос: есть ли способ переопределить обычное поле модели в Django без наследования?
Насколько я знаю, нет. Я бы рассмотрел возможность модификации (форкинга) модели "библиотеки", хотя могут возникнуть проблемы, если это проприетарный код третьей стороны, для которого у вас нет исходников.
Обычно против конкретного наследования говорят, что оно приводит к созданию новой таблицы БД, и после этого каждый запрос включает соединение по полю OneToOne между двумя таблицами. Однако мне интересно, произойдет ли это, если вы просто добавите ограничение к существующему полю. Возможно, стоит изучить этот вопрос более подробно.
Аналогично, можно ли просто наследовать, чтобы подклассифицировать метод .save()
и применить в нем эквивалент ограничения? Это не пуленепробиваемо, потому что оно выполняется только при сохранении объектов Django и может быть отменено как django bulk_update, так и любым человеком, обращающимся к таблице DB без Django. И опять же, в итоге создается и присоединяется вторая таблица DB, даже если она не содержит вообще никаких полей (кроме первичного ключа)
Простите, больше вопросов, чем адекватных ответов. Может быть, кто-нибудь знает ответы?