Django==1.9.13
Mezzanine==4.3.0
Django Mezzanine Cartridge のテストで マイグレーションをキャンセルした時
settingsに
if 'test' in sys.argv:
CAPTCHA_TEST_MODE = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
},
}
DATABASE_ROUTERS = []
class DisableMigrations(object):
def __contains__(self, item):
return True
def __getitem__(self, item):
return 'notmigrations'
MIGRATION_MODULES = DisableMigrations()
こんな感じに書いてやってたのですが、
ManyToManyフィールドの trouth= がらみの問題で、table already exists で create teable が止まってテストができなくなってました。
なので、BaseDatabaseSchemaEditor の CREATE TABLE 文をパッチして CREATE TABLE IF NOT EXISTS にすれば止まらずに実行できます。
from django.db.backends.sqlite3.schema import DatabaseSchemaEditor
# CREATE TABLE をパッチ
DatabaseSchemaEditor.sql_create_table = \
"CREATE TABLE IF NOT EXISTS %(table)s (%(definition)s)"
DatabaseSchemaEditor.sql_create_index = \
"CREATE INDEX IF NOT EXISTS %(name)s ON %(table)s (%(columns)s)%(extra)s"
DatabaseSchemaEditor.sql_create_unique = \
"CREATE UNIQUE INDEX IF NOT EXISTS %(name)s ON %(table)s (%(columns)s)"
django.db.utils.DatabaseErrorWrapper をパッチして、エラーを握りつぶしてもいいかもしれない
コメント