我正在尝试将django1.6项目升级到1.8。这次升级似乎使南方不再使用。我正在尝试更新我的迁移。我按照指南进行操作,使操作看起来很简单。我删除了所有旧的迁移文件,然后运行makemigrations
来生成新的文件。如果我运行migrate
,所有迁移都将正确运行。
运行单元测试设置时,出现错误消息:
self = <django.db.backends.sqlite3.base.SQLiteCursorWrapper object at 0x111eb4168>
query = 'SELECT "common_basecacheconfig"."id", "common_baseconfig"."contact", "common_baseconfig"."slack_room", "com...config_ptr_id" = "common_baseconfig"."id" ) ORDER BY "app_appconfig"."uniqueentryconfig_ptr_id" ASC'
params = ()
def execute(self, query, params=None):
if params is None:
return Database.Cursor.execute(self, query)
query = self.convert_query(query)
> return Database.Cursor.execute(self, query, params)
E django.db.utils.OperationalError: no such column: app_appconfig.name
Django-1.8.3-py2.py3-none-any.whl/django/db/backends/sqlite3/base.py:318: OperationalError
我编辑了一些消息以取出公司特定的内容。但这是相同的信息。
这些是我相信的相关模型
name_model = models.CharField(max_length=64, blank=False, db_index=True,
validators=[validate_name])
stage_model = models.CharField(max_length=10, choices=STAGE_CHOICES, default=(TEST, TEST))
class UniqueEntryConfig(BaseCacheConfig):
name = name_model
stage = stage_model
class Meta:
unique_together = ('name', 'stage')
class AppConfig(UniqueEntryConfig):
_SERVER_PATH_TEMPLATE = '/service/%s/%s/%s_api'
def trimmed_name(self):
return self.name.replace('app_', '', 1)
def cm_prefix(self):
return self.name
def delete(self):
for config in self.capacity_configs.all():
config.delete()
super(AppConfig, self).delete()
def server_path(self):
return self._SERVER_PATH_TEMPLATE % (
RoleDecider.api(self.stage), self.stage, self.name)
self_served = models.BooleanField(default=True)
jira_link = models.URLField(blank=True)
如果我为abstract = True
添加Class Meta
和UniqueEntryConfig
,则可以使它运行,但是我认为生成的迁移不适用于现有数据库。如果我运行makemigrations,则添加abstract = True
会导致测试失败,并出现有关字段冲突的错误。