Opened 11 years ago
Closed 11 years ago
#22708 closed Bug (fixed)
InvalidBasesError when running manage.py migrate
| Reported by: | strelnikovdmitrij | Owned by: | nobody |
|---|---|---|---|
| Component: | Migrations | Version: | 1.7-beta-2 |
| Severity: | Release blocker | Keywords: | |
| Cc: | cmawebsite@… | Triage Stage: | Accepted |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
what does it exactly means and how to handle it?
all the time after adding new model this raise error
if not raising, (on very basic models add) and new model should be created - its actually don't create any
Django version 1.7b4
Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Migrations for 'account':
0004_auto_20140527_1518.py:
- Create model LoginFailed
- Alter field ip on loginactivity
dmitrij$ python manage.py migrate
Operations to perform:
Synchronize unmigrated apps: ***
Apply all migrations: account, ***
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
Applying account.0004_auto_20140527_1518...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/dmitrij/dev/django/django/core/management/__init__.py", line 427, in execute_from_command_line
utility.execute()
File "/Users/dmitrij/dev/django/django/core/management/__init__.py", line 419, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/dmitrij/dev/django/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Users/dmitrij/dev/django/django/core/management/base.py", line 337, in execute
output = self.handle(*args, **options)
File "/Users/dmitrij/dev/django/django/core/management/commands/migrate.py", line 146, in handle
executor.migrate(targets, plan, fake=options.get("fake", False))
File "/Users/dmitrij/dev/django/django/db/migrations/executor.py", line 62, in migrate
self.apply_migration(migration, fake=fake)
File "/Users/dmitrij/dev/django/django/db/migrations/executor.py", line 90, in apply_migration
if self.detect_soft_applied(migration):
File "/Users/dmitrij/dev/django/django/db/migrations/executor.py", line 134, in detect_soft_applied
apps = project_state.render()
File "/Users/dmitrij/dev/django/django/db/migrations/state.py", line 68, in render
raise InvalidBasesError("Cannot resolve bases for %r" % new_unrendered_models)
django.db.migrations.state.InvalidBasesError: Cannot resolve bases for [<django.db.migrations.state.ModelState object at 0x102f19ad0>, <django.db.migrations.state.ModelState object at 0x102f19b90>, <django.db.migrations.state.ModelState object at 0x102f19c50>]
---0004_auto_20140527_1518.py---
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import django.utils.timezone
from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('account', '0003_loginactivity'),
]
operations = [
migrations.CreateModel(
name='LoginFailed',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('user', models.ForeignKey(to_field='id', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
('username', models.CharField(max_length=120)),
('password', models.CharField(max_length=120, null=True, blank=True)),
('created', models.DateField(default=django.utils.timezone.now)),
('ip', models.GenericIPAddressField(null=True, blank=True)),
],
options={
},
bases=(models.Model,),
),
migrations.AlterField(
model_name='loginactivity',
name='ip',
field=models.GenericIPAddressField(),
),
]
Attachments (1)
Change History (18)
comment:1 by , 11 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 11 years ago
| Summary: | migrations doesn't migrate → InvalidBasesError when running manage.py migrate |
|---|
comment:3 by , 11 years ago
hi Timo,
all my models are inherit from models.Model or AbstractBase for User custom model
if you still want to provide them - which one do you need?
regards,
Dmitrij
comment:4 by , 11 years ago
We need a minimal set of models to reproduce the issue. #22743 seems to be a duplicate and the models provided there may be enough.
comment:5 by , 11 years ago
comment:6 by , 11 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
Please retest with the latest master or stable/1.7.x and reopen with details if this is still an issue.
comment:7 by , 11 years ago
| Resolution: | needsinfo |
|---|---|
| Status: | closed → new |
This seems to have regressed. I can reproduce the error with these models on today's stable/1.7.x
from django.contrib.contenttypes.models import ContentType from django.db import models class PageElement(models.Model): content_type = models.ForeignKey(ContentType) class Link(PageElement): href = models.CharField(max_length=255)
comment:8 by , 11 years ago
| Severity: | Normal → Release blocker |
|---|
Sorry, posted that last comment anonymously (and before finishing). I've attached an example project to reproduce the exception. This example is fairly basic and doesn't use swappable models. Just basic model inheritance. The starnge thing is, if you rename "PageEleemnt" to "BaseElement", the migration works. This leads me to believe theirs a dict or set is being used somewhere where order is important.
by , 11 years ago
| Attachment: | testproject.tar.gz added |
|---|
Example project to reproduce InvalidBaseError
comment:9 by , 11 years ago
I can confirm that the simple testproject does not work either on the latest 1.7.x or on master, and that it works fine if the model is named BaseElement. Would it help if we gave ModelState a __repr__()?
comment:10 by , 11 years ago
I believe the issue is that the auto-generated migration creates Link first (with base PageElement), then creates PageElement second:
operations = [
migrations.CreateModel(
name='Link',
fields=[
('href', models.CharField(max_length=255)),
],
options={
},
bases=('testapp.pageelement',),
),
migrations.CreateModel(
name='PageElement',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('content_type', models.ForeignKey(to='contenttypes.ContentType', to_field='id')),
],
options={
},
bases=(models.Model,),
),
migrations.AddField(
model_name='link',
name='pageelement_ptr',
field=models.OneToOneField(auto_created=True, primary_key=True, to_field='id', serialize=False, to='testapp.PageElement'),
preserve_default=True,
),
]
comment:11 by , 11 years ago
| Cc: | added |
|---|
comment:12 by , 11 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:13 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
comment:15 by , 11 years ago
I've made a stabke.1.7.x checkout now with that commit and still contenttypes doesn't want to migrate.
comment:16 by , 11 years ago
| Resolution: | fixed |
|---|---|
| Status: | closed → new |
Hi there,
Same problem here with a fresh checkout of stable/1.7.x when running my tests (which used to works a few weeks ago):
Creating test database for alias 'default'...
Traceback (most recent call last):
File "manage.py", line 9, in <module>
execute_from_command_line(sys.argv)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/commands/test.py", line 50, in run_from_argv
super(Command, self).run_from_argv(argv)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/commands/test.py", line 71, in execute
super(Command, self).execute(*args, **options)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/base.py", line 337, in execute
output = self.handle(*args, **options)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/commands/test.py", line 88, in handle
failures = test_runner.run_tests(test_labels)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/test/runner.py", line 147, in run_tests
old_config = self.setup_databases()
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/test/runner.py", line 109, in setup_databases
return setup_databases(self.verbosity, self.interactive, **kwargs)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/test/runner.py", line 299, in setup_databases
serialize=connection.settings_dict.get("TEST_SERIALIZE", True),
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/db/backends/creation.py", line 374, in create_test_db
test_flush=True,
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/__init__.py", line 115, in call_command
return klass.execute(*args, **defaults)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/base.py", line 337, in execute
output = self.handle(*args, **options)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/core/management/commands/migrate.py", line 160, in handle
executor.migrate(targets, plan, fake=options.get("fake", False))
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/db/migrations/executor.py", line 62, in migrate
self.apply_migration(migration, fake=fake)
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/db/migrations/executor.py", line 90, in apply_migration
if self.detect_soft_applied(migration):
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/db/migrations/executor.py", line 134, in detect_soft_applied
apps = project_state.render()
File "/Users/stan/src/venv_dj_1_7/lib/python2.7/site-packages/Django-1.7c1-py2.7.egg/django/db/migrations/state.py", line 71, in render
raise InvalidBasesError("Cannot resolve bases for %r" % new_unrendered_models)
InvalidBasesError: Cannot resolve bases for [<ModelState: 'parametrage.Support'>, <ModelState: 'parametrage.Commercial'>, <ModelState: 'parametrage.Assistant'>, <ModelState: 'parametrage.Production'>, <ModelState: 'parametrage.Traducteur'>]
make: *** [test] Error 1
I am not using migrations.
Here my models.py:
from django.contrib.sites.models import Site
from django.contrib.auth.models import User
class Support(Site):
short_name = models.CharField('nom court', max_length=10, unique=True)
logo = models.ImageField('logo', upload_to='images/supports', blank=True)
site_ptr = models.OneToOneField(Site, primary_key=True)
objects = SupportManager()
class Employe(User):
supports = models.ManyToManyField(Support)
organisation = models.ForeignKey('Organisation', null=True, blank=True)
filtre_organisation = models.BooleanField(default=False)
telephone = models.CharField(u'téléphone', max_length=100, blank=True)
class Meta:
abstract = True
ordering = ('last_name', 'first_name')
def __unicode__(self):
return self.get_full_name()
def supports_txt(self):
return ', '.join([str(s) for s in self.supports.all()])
supports_txt.short_description = 'supports'
class Commercial(Employe):
class Meta:
verbose_name_plural = 'commerciaux'
ordering = ('first_name', 'last_name')
class Assistant(Employe):
class Meta:
verbose_name = 'chargé de clientèle'
verbose_name_plural = 'chargés de clientièle'
class Production(Employe):
class Meta:
verbose_name = 'chargé de production'
verbose_name_plural = 'chargés de production'
class Traducteur(Employe):
pass
Cheers,
Stanislas.
Could you include the models as well? Particularly, if there are any that do more than just inherit from
models.Model. I suspect the problem lies somewhere in there.