2015-04-05 2 views
1

Я получаю ошибку django.db.migrations.graph.CircularDependencyError при применении миграции. Заметно, что я начинаю с пустой базы данных.Django круговая зависимость

Мне также удалось свернуть до класса, который вызывает ошибку, которая, кажется, OAuthAccessToken.

class OAuthAccessToken(Model): 

    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='oauth_access_tokens', 
     help_text=_('User')) 

    provider = models.ForeignKey(Provider, related_name='oauth_access_tokens', 
     help_text=_('OAuth provider')) 

    token = fields.SafeRandomField(max_length=32, 
     help_text=_('Access token')) 

Код выше работает только если я комментировать provider декларацию. Класс Provider находится из рамки allaccess. Вот его заявление:

@python_2_unicode_compatible 
class Provider(models.Model): 
    "Configuration for OAuth provider." 

    name = models.CharField(max_length=50, unique=True) 
    request_token_url = models.CharField(blank=True, max_length=255) 
    authorization_url = models.CharField(max_length=255) 
    access_token_url = models.CharField(max_length=255) 
    profile_url = models.CharField(max_length=255) 
    consumer_key = EncryptedField(blank=True, null=True, default=None) 
    consumer_secret = EncryptedField(blank=True, null=True, default=None) 

Еще один способ для меня, чтобы сделать код работы, если удалить AUTH_USER_MODEL = 'api.User' из моего файла настроек, в этом случае первый пример кода работы.

Дело в том, я проверил миграции и нашел это:

migrations.CreateModel(
     name='OAuthAccessToken', 
     fields=[ 
      ('uid', rest.fields.IDField(default=rest.fields.GenerateID(15, b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), max_length=15, serialize=False, primary_key=True, help_text='Server generated public unique ID')), 
      ('creation_date', models.DateTimeField(help_text='Creation date', auto_now_add=True)), 
      ('last_update', models.DateTimeField(help_text='Last update', auto_now=True)), 
      ('token', rest.fields.SafeRandomField(default=rest.fields.GenerateID(32, b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), help_text='Access token', max_length=32)), 
      ('provider', models.ForeignKey(related_name='oauth_access_tokens', to='allaccess.Provider', help_text='OAuth provider')), 
      ('user', models.OneToOneField(related_name='oauth_access_tokens', to=settings.AUTH_USER_MODEL, help_text='User')), 
     ], 
     options={ 
      'abstract': False, 
     }, 
     bases=(models.Model,), 
    ), 

Но я не в состоянии увидеть, где циклическая зависимость есть.

Edit:

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line 
    utility.execute() 
    File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 377, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 338, in execute 
    output = self.handle(*args, **options) 
    File "/Library/Python/2.7/site-packages/django/core/management/commands/migrate.py", line 106, in handle 
    plan = executor.migration_plan(targets) 
    File "/Library/Python/2.7/site-packages/django/db/migrations/executor.py", line 49, in migration_plan 
    for migration in self.loader.graph.forwards_plan(target): 
    File "/Library/Python/2.7/site-packages/django/db/migrations/graph.py", line 55, in forwards_plan 
    return self.dfs(node, lambda x: self.dependencies.get(x, set())) 
    File "/Library/Python/2.7/site-packages/django/db/migrations/graph.py", line 105, in dfs 
    raise CircularDependencyError() 
django.db.migrations.graph.CircularDependencyError 

Edit: обновление с использованием Джанго 1.7.7

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line 
    utility.execute() 
    File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 377, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/Library/Python/2.7/site-packages/django/core/management/base.py", line 338, in execute 
    output = self.handle(*args, **options) 
    File "/Library/Python/2.7/site-packages/django/core/management/commands/migrate.py", line 106, in handle 
    plan = executor.migration_plan(targets) 
    File "/Library/Python/2.7/site-packages/django/db/migrations/executor.py", line 54, in migration_plan 
    for migration in self.loader.graph.forwards_plan(target): 
    File "/Library/Python/2.7/site-packages/django/db/migrations/graph.py", line 60, in forwards_plan 
    return self.dfs(node, lambda x: self.dependencies.get(x, set())) 
    File "/Library/Python/2.7/site-packages/django/db/migrations/graph.py", line 124, in dfs 
    self.ensure_not_cyclic(start, get_children) 
    File "/Library/Python/2.7/site-packages/django/db/migrations/graph.py", line 112, in ensure_not_cyclic 
    raise CircularDependencyError(", ".join("%s.%s" % n for n in cycle)) 
django.db.migrations.graph.CircularDependencyError: api.0001_initial, allaccess.0001_initial 
+0

Вы можете написать сообщение об ошибке? Дополнительная информация о ваших миграциях также будет полезна, особенно в отношении зависимостей. – knbk

+0

@mu 無 В разных моделях, тем не менее, это не проблема. – knbk

+0

@mu 無 Я уже пробовал другое имя, без эффекта –

ответ

0

Случается, что мне нужно реорганизовать код и создать новое приложение содержит некоторые из моделей для решения Эта проблема. Затем Django создает несколько миграций (например, 0002, 0003) и поэтому может разрешать циклическую зависимость.

Смежные вопросы