Python Django循环模型依赖关系
我在Django模型中有一个循环依赖项,因此模型a有一个对B的外键引用,而B有一个对a的多对多引用。我参考了其他SO文章,使用了字符串模型名而不是实际的类,但没有用。以下是我的两个课程的缩写版本: 用户模型Python Django循环模型依赖关系,python,database,django,database-design,django-models,Python,Database,Django,Database Design,Django Models,我在Django模型中有一个循环依赖项,因此模型a有一个对B的外键引用,而B有一个对a的多对多引用。我参考了其他SO文章,使用了字符串模型名而不是实际的类,但没有用。以下是我的两个课程的缩写版本: 用户模型 import listings.models class User(models.Model): ... favorites = models.ManyToManyField('listings.models.Listing') import users.models
import listings.models
class User(models.Model):
...
favorites = models.ManyToManyField('listings.models.Listing')
import users.models
class Listing(models.Model):
...
owner = models.ForeignKey('users.models.User')
上市模式
import listings.models
class User(models.Model):
...
favorites = models.ManyToManyField('listings.models.Listing')
import users.models
class Listing(models.Model):
...
owner = models.ForeignKey('users.models.User')
每次尝试运行syncdb时,它都会输出以下错误:
错误:一个或多个模型未验证:users.user:“收藏夹”
与model listings.models.Listing具有m2m关系,后者具有
未安装或是抽象的。listings.listing:'所有者'
与model users.models.User有关系,后者没有
已安装或是抽象的
如何在不牺牲已建立的关系的情况下解决此问题?
应该是'listings.models.Listing'
'listings.Listing'
应该是'users.models.User'
(或者'users.User'
,如果要使用'auth.User'
)django.contrib.auth.models.User
有关更多信息,请参阅。您可以删除导入,因为您不依赖于代码。您只使用带有模型名的字符串-它不是依赖项。
此外,您还应该从字符串中删除
模型
,因为您可以将模型分别称为应用程序名称.模型名称
列表.列表
和用户.用户
。案例仍然很重要。谢谢,答案更新以匹配文档。。。但我很困惑,因为它在Django 1.4.2上。也许是虫子吧?哇,谢谢,真管用。这是Django特有的,还是Python通常允许您通过包而不是其父模块取消对类的引用?这是Django特有的。但是你可以用