Я пошел добавлять текстовое поле к модели в своем приложении django, сделал, применил свои миграции, У меня есть тесты, проваливающиеся влево и вправо. Оказывается, миграция решила отказаться от поля, которое все еще существует в моей модели.Почему миграция Django (1.8.3) при миграции происходит, когда они все еще находятся в модели
Прежде чем продолжить, некоторые из соответствующих кода. Во-первых, осуществляется модель:
class CandidateProfile(models.Model):
user_profile = models.ForeignKey(UserProfile, related_name="candidate_profile", null=True, blank=True)
facebook_url = models.CharField(max_length=200, default="")
website = models.CharField(max_length=200, default="")
primary_email = models.CharField(max_length=100, default="")
party = models.ForeignKey(PoliticalParty, related_name="candidate_party", null=True, blank=True)
uploaded_picture = models.CharField(max_length=200, default="")
ref_id = models.CharField(db_index=True, max_length=50, default="")
create_date = models.DateTimeField(auto_now_add=True)
update_date = models.DateTimeField(auto_now=True)
В поле я добавил был facebook_url
. До этой миграции, приложение работы, тесты прохождения и т.д. Миграция, которая была генерируемый:
class Migration(migrations.Migration):
dependencies = [
('users', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='candidateprofile',
name='party',
),
migrations.AddField(
model_name='candidateprofile',
name='facebook_url',
field=models.CharField(default=b'', max_length=200),
),
]
Само исправление достаточно просто, я могу откатить свою миграцию, и вручную удалить migrations.RemoveField
. Единичные тесты сделали то, что они должны были делать, давая мне знать, что я что-то прикрутил, но я все еще беспокоюсь о чем-то подобном, проходящем в производство, теряя данные и восстанавливая их из резервной копии.
Мой вопрос: почему Django считает, что поле должно быть удалено, хотя оно явно присутствует в качестве внешнего ключа в модели?
Edit: После поля было удалено, я попытался изменить свойства на атрибуте party
, чтобы увидеть, если все, что дифф-кий механизм Django использует будет забрать его. Нет кости, изменение related_name
, null
, или blank
ничего не сделал. Запуск makemigrations
не обнаружил никаких изменений.
Кроме того, внешний ключ модель для справки:
class PoliticalParty(models.Model):
name = models.CharField(max_length="100")
full_name = models.CharField(max_length="255")
abbreviation = models.CharField(max_length="20")
ref_id = models.CharField(max_length="50", default="", db_index=True)
create_date = models.DateTimeField(auto_now_add=True)
update_date = models.DateTimeField(auto_now=True)
Yup, это как раз то, что я сделал. Обновлено мое соглашение об именах для методов getter и больше проблем. Спасибо, это меня заводило. – west1737