我无法在线找到此问题的解决方案。我所拥有的只是"To manually resolve a CircularDependencyError, break out one of the ForeignKeys in the circular dependency loop into a separate migration, and move the dependency on the other app with it. If you’re unsure, see how makemigrations deals with the problem when asked to create brand new migrations from your models. In a future release of Django, squashmigrations will be updated to attempt to resolve these errors itself."
来自docs。我对django迁移有点新意,我喜欢更容易理解和易于理解的答案。
我收到此错误:
raise CircularDependencyError(", ".join("%s.%s" % n for n in cycle))
django.db.migrations.graph.CircularDependencyError: libros.0001_initial, perfiles.0001_initial
我不知道如何找到CircularDependency的位置,我不知道如何解决它。正如您所看到的,迁移是n001 - 这是因为我尝试删除它们并再次执行它,但是没有用。请帮忙。
答案 0 :(得分:5)
您应该创建一个没有外键的迁移,然后再添加FK。
让我们假设您要创建这些模型:
<强> libros / models.py 强>:
class Libro(models.Model):
name = models.CharField(max_length=20)
perfile = models.ForeignKey('perfiles.Perfile', null=True)
<强> perfiles / models.py 强>:
class Perfile(models.Model):
name = models.CharField(max_length=20)
libro = models.ForeignKey('libros.Libro', null=True)
当然,由于循环依赖,你无法做到这一点。因此,在Libro
模型中注释掉外键:
class Libro(models.Model):
name = models.CharField(max_length=20)
# perfile = models.ForeignKey('perfiles.Perfile', null=True)
并进行两次迁移:
python manage.py makemigrations libros
python manage.py makemigrations perfiles
之后取消注释perfile
模型中的Libro
外键并运行另一次迁移:
python manage.py makemigrations libros
答案 1 :(得分:0)
对于遇到过CircularDependencyError的人 - 不一定使用ForeignKey - 最好去周期
python manage.py makemigrations app_name; python manage.py migrate
对于项目中的每个应用程序,逐个。
这适用于Django 1.10