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:

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+unsubscr...@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.

Attachment: test_django.tar.gz
Description: Binary data

Reply via email to