Den*_*nny 3 python django django-models django-migrations
我有2个django应用程序,即主要和authtools.我跑的时候
python manage.py migrate
,我得到一个CircularDependencyError:
raise CircularDependencyError(", ".join("%s.%s" % n for n in cycle))
django.db.migrations.graph.CircularDependencyError: main.0001_initial, authtools.0001_initial
Run Code Online (Sandbox Code Playgroud)
在我的设置文件中,我将AUTH_USER_MODEL定义为:AUTH_USER_MODEL = 'authtools.User'.创建的迁移文件如下所示:对于authtools应用程序,它将依赖关系显示为:
dependencies = [
('main', '__first__'),
('auth', '0001_initial'),
]
Run Code Online (Sandbox Code Playgroud)
而对于主要应用程序,depandancies显示为:
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
Run Code Online (Sandbox Code Playgroud)
可能有什么不对?
如果您对不同的应用程序使用ManyToMany +'through'选项,则根据此答案,您应该:
如果你不使用ManyToMany,那么根据这个答案,尝试类似的动作.
让我们假设您要创建这些模型:
libros/models.py:
class Libro(models.Model):
name = models.CharField(max_length=20)
perfile = models.ForeignKey('perfiles.Perfile', null=True)
Run Code Online (Sandbox Code Playgroud)
perfiles/models.py:
class Perfile(models.Model):
name = models.CharField(max_length=20)
libro = models.ForeignKey('libros.Libro', null=True)
Run Code Online (Sandbox Code Playgroud)
当然,由于循环依赖,你不能这样做.因此,在Libro模型中注释掉外键:
class Libro(models.Model):
name = models.CharField(max_length=20)
# perfile = models.ForeignKey('perfiles.Perfile', null=True)
Run Code Online (Sandbox Code Playgroud)
并运行两次迁移:
python manage.py makemigrations libros
python manage.py makemigrations perfiles
Run Code Online (Sandbox Code Playgroud)
之后取消注释模型中的perfile外键Libro并运行另一个迁移:
python manage.py makemigrations libros
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6376 次 |
| 最近记录: |