У меня довольно раздражающая проблема при попытке отправить мое слияние в мои автоматические тесты на круге CI.
Просто для контекста, я унаследовал проект, авторы которого больше не работают над моим текущимработа.
Я работаю над django, и я выполнил слияние от моей локальной ветки разработчика до моей локальной ветки master.Слияние прошло хорошо.Однако при запуске сервера django через manage.py runserver
выдается предупреждение Your project may not work properly until you apply the migrations for app(s)[...]
.
При выполнении manage.py migrate
я сталкиваюсь с первой проблемой:
1- django.db.utils.ProgrammingError: relation "cms_disclaimerpanel" already exists
Я исправляю проблему, вручную редактируя файл переноса, комментируя следующие строки
# migrations.CreateModel(
# name='DisclaimerPanel',
# fields=[
# ('abstractpanel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.AbstractPanel')),
# ('title', models.CharField(blank=True, max_length=1024, verbose_name='title')),
# ('show_title', models.BooleanField(default=True, verbose_name='show title')),
# ('subtitle', models.TextField(blank=True, verbose_name='content')),
# ('show_subtitle', models.BooleanField(default=True, verbose_name='show subtitle')),
# ('alignment', models.CharField(choices=[('left', 'left'), ('center', 'center')], default='center', max_length=10, verbose_name='text alignment')),
# ('button', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='cms.Link')),
# ],
# options={
# 'verbose_name': 'Disclaimer Panel',
# },
# bases=('cms.abstractpanel',),
# )
Затем возникла вторая проблема при переносе моего manage.py migrate
2 - ProgrammingError: column "http_request_lang" of relation "cms_dynamicsettings" does not exist
Я исправляю проблему, вручную редактируя файл миграции, комментируя следующие строки
#operations = [
# migrations.RemoveField(
# model_name='dynamicsettings',
# name='http_request_lang',
# ),
#]
manage.py
удалось выполнить полностью.Затем я запустил manage.py makemigrations
, и он дал мне этот последний файл
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('cms', '0088_merge_20190411_1655'),
]
operations = [
migrations.CreateModel(
name='DisclaimerPanel',
fields=[
('abstractpanel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.AbstractPanel')),
('title', models.CharField(blank=True, max_length=1024, verbose_name='title')),
('show_title', models.BooleanField(default=True, verbose_name='show title')),
('subtitle', models.TextField(blank=True, verbose_name='content')),
('show_subtitle', models.BooleanField(default=True, verbose_name='show subtitle')),
('alignment', models.CharField(choices=[('left', 'left'), ('center', 'center')], default='center', max_length=10, verbose_name='text alignment')),
('button', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='cms.Link')),
],
options={
'verbose_name': 'Disclaimer Panel',
},
bases=('cms.abstractpanel',),
),
migrations.RemoveField(
model_name='dynamicsettings',
name='http_request_lang',
),
]
С изменениями выше, я могу запустить manage.py runserver
.
Затем я добавляю эти 3 файла в свойобъедините ветку и создайте удаленный репозиторий для моей ветки.
Каждый новый созданный репозиторий проходит через модульное тестирование, и в этом заключается проблема, так как он не учитывает мои три новых зафиксированных файла.
Это дает мне следующую ошибку, ту же ошибкукак в пункте 2 (см. выше).
ERROR: relation "cms_dynamicsettings" does not exist at character 1508
Используя мою среду разработки в качестве шаблона, я предполагаю, что круг ci повторяет ту же проблему, с которой я столкнулся, и которую я исправил вручную.
Вопросы следующие:
Есть ли способ отбросить мою модель cms_disclaimer
до ее запуска через этот чертов файл миграции?Если да, то как?
Есть ли способ не принимать во внимание файл миграции и указывать ему не удалять столбец http_request_lang
Мой последний вопрос: почему manage.py makemigrations
не видит изменений в базе данных?
Еще одна информация:
База данных была построена с мастером ветвления,Я проверяю другую ветку на основе master, объединяю свою ветку dev с master и затем manage.py migrate
.
Любая информация будет более чем приветствоваться, так как я теряю рассудок.
Спасибо.