2015-12-19 2 views
1

У меня есть циклическая зависимость между двумя моделями, userprofile и image:Пользовательские изображения Django - как обойти эту круговую зависимость?

  • профиля пользователя имеет ForeignKey к изображению пользователя

  • Изображения имеет ForeignKey в профиль пользователя, чтобы указать владелец этого образа

Это ошибка показано при запуске makemigrations:

File "/usr/local/lib64/python3.4/site-packages/django/db/migrations/graph.py", line 241, in ensure_not_cyclic 
    raise CircularDependencyError(", ".join("%s.%s" % n for n in cycle)) 
django.db.migrations.exceptions.CircularDependencyError: profiles.0001_initial, media.0001_initial 

Что такое чистый способ обойти это? (Я бы предпочел сохранить изображения, связанные с профилем пользователя, а не с пользователем auth, чтобы владение профилем пользователя и всем носителем было легко перенесено, если это когда-либо было необходимо)

Вот код (Lessor - это профиль пользователя):

profiles.models

class Lessor(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, models.CASCADE) 
    logo = models.ForeignKey('media.Image', related_name='logo_set', null=True) 
    portrait = models.ForeignKey('media.Image', related_name='portrait_set', null=True) 

media.models

class Image(models.Model): 
    author = models.ForeignKey('profiles.Lessor') 
+0

Самый чистый способ заключается в том, что только ваше поле изображения имеет модель ForeignKey для модели Арендодателя, а не обе они имеют FK друг к другу. – qasimalbaqali

+0

О, тогда я, возможно, пойду за неправильной причиной ошибки, пожалуйста, взгляните, я обновил OP. Я думал, что это проблема, но это может быть что-то другое. – dtgq

+0

Является ли владельцем изображения другого человека с лица, изображение которого является портретом? –

ответ

2

Прокомментируйте внешний ключ Lessor.portrait и создайте миграцию для обеих моделей.

После того, как была создана модель Image, вы можете раскомментировать это поле и создать другую миграцию для добавления внешнего ключа.

+0

Спасибо, это сработало. Не могли бы вы объяснить, почему? – dtgq

+0

Django не может создавать внешние ключи для обеих моделей одновременно, потому что тогда обе миграции зависят друг от друга, и у вас есть круговая зависимость. Добавляя один внешний ключ одновременно, вы нарушаете круговую зависимость. – Alasdair

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