Hello,
I'm struggling with migrations when trying to add a m2m between two apps in Django dev. I don't know if this is a bug or if I'm doing it wrong but basically, if main.models is:
And custom_auth.models is:
Then adding the following field to custom_auth.models.User (that cannot be done in one migration because of a CircularDependency exception):
Will raise the following exception when migrating (makemigrations is fine):
I'm attaching this test project to the email, you'll see that the last migration will fail.
Am I missing something obvious here? The FK in main.UserRestaurant is working fine but I don't know what can't Django resolve main.Restaurant in custom_auth.User...
Thank you for your help
Baptiste
-- I'm struggling with migrations when trying to add a m2m between two apps in Django dev. I don't know if this is a bug or if I'm doing it wrong but basically, if main.models is:
from django.conf import settings
from django.db import models
class Restaurant(models.Model):
name = models.CharField(max_length = 80)
class UserRestaurant(models.Model):
restaurant = models.ForeignKey(Restaurant)
user = models.ForeignKey('custom_auth.User')
And custom_auth.models is:
from django.db import models
class User(models.Model):
address = models.CharField(max_length=100, blank=True)
Then adding the following field to custom_auth.models.User (that cannot be done in one migration because of a CircularDependency exception):
restaurants = models.ManyToManyField('main.Restaurant')
Will raise the following exception when migrating (makemigrations is fine):
$ python3 manage.py migrate
Operations to perform:
Synchronize unmigrated apps: admin, sessions, auth, contenttypes
Apply all migrations: custom_auth, main
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
Applying custom_auth.0002_user_restaurants...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/core/management/__init__.py", line 427, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/core/management/__init__.py", line 419, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/core/management/base.py", line 287, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/core/management/base.py", line 336, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/core/management/commands/migrate.py", line 145, in handle
executor.migrate(targets, plan, fake=options.get("fake", False))
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/migrations/executor.py", line 60, in migrate
self.apply_migration(migration, fake=fake)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/migrations/executor.py", line 94, in apply_migration
migration.apply(project_state, schema_editor)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/migrations/migration.py", line 97, in apply
operation.database_forwards(self.app_label, schema_editor, project_state, new_state)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/migrations/operations/fields.py", line 35, in database_forwards
field,
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/backends/sqlite3/schema.py", line 110, in add_field
return self.create_model(field.rel.through)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/backends/schema.py", line 191, in create_model
definition, extra_params = self.column_sql(model, field)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/backends/schema.py", line 108, in column_sql
db_params = field.db_parameters(connection=self.connection)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/models/fields/related.py", line 1754, in db_parameters
return {"type": self.db_type(connection), "check": []}
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/models/fields/related.py", line 1745, in db_type
rel_field = self.related_field
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/models/fields/related.py", line 1651, in related_field
return self.foreign_related_fields[0]
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/models/fields/related.py", line 1410, in foreign_related_fields
return tuple(rhs_field for lhs_field, rhs_field in self.related_fields)
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/models/fields/related.py", line 1397, in related_fields
self._related_fields = self.resolve_related_fields()
File "/usr/local/lib/python3.3/dist-packages/Django-1.7a2-py3.3.egg/django/db/models/fields/related.py", line 1382, in resolve_related_fields
raise ValueError('Related model %r cannot be resolved' % self.rel.to)
ValueError: Related model 'main.Restaurant' cannot be resolved
I'm attaching this test project to the email, you'll see that the last migration will fail.
Am I missing something obvious here? The FK in main.UserRestaurant is working fine but I don't know what can't Django resolve main.Restaurant in custom_auth.User...
Thank you for your help
Baptiste
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/5cc913bb-5c9b-421d-80f9-2e7e3044258f%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
No comments:
Post a Comment