Я использую Django на Heroku с функцией без простоев. Это означает, что во время развертывания в одной базе данных работают две версии кода (старая и новая). Вот почему мы должны избегать любых обратных несовместимых миграций.
Есть ли возможность исключить поле из запроса Django для данной модели?
Допустим, у нас есть модель (версия 1):
class Person(models.Model):
name = models.CharField()
address = models.TextField()
В некоторыхВ будущем мы хотим перенести адрес в отдельную таблицу. Мы знаем, что не следует удалять поле для более старого кода для работы, поэтому модель Person может выглядеть так (версия 2):
class Person(models.Model):
name = models.CharField()
address = models.ForeignKey(Address)
_address = models.TextField(db_name='address')
Таким образом, если старый код будет запрашивать адрес, он получит его из таблицы Personдаже если база данных была перенесена (это будет старое значение, но давайте предположим, что это не большая проблема).
Как теперь я могу безопасно удалить поле _address
? Если мы развернем версию 3 с удаленным полем _address
, то код для версии 2 все равно будет пытаться получить _address
при выборе, даже если он нигде не используется и завершится с ошибкой «Нет такого столбца».
Есть ли способ предотвратить это и пометить какое-либо поле как "не подлежащее извлечению" в коде для версии 2? Таким образом, версия 2 не удалит поле, но больше не будет его извлекать, а версия 3 удалит поле.