2011-03-15 65 views
5

我为了两类:正向类的声明在Python

class A(models): 
    ... 

class B(models): 
    a = models.ManyToManyField(A) 

现在我有我的模式改变为以下之一:

class A(models): 
    b = models.ManyToManyField(B) 

class B(models): 
    ... 

我必须使用南方迁移。我希望在A类中创建多个到多个领域,从B类迁移数据并删除字段。问题是两者都处于相同模型中。所以当我把很多很多的东西放到A课程中时,它是不可见的。因为B声明低于A.如何解决这个问题?

+0

[Django模型:两个类之间的相互引用和不可能在Python中使用前向声明]可能的副本(http://stackoverflow.com/questions/7298326/django-models-mutual-references-between-two-class -and-impossible-to-use-fo) – 2016-05-22 20:20:05

回答

9

至少SQLAlchemy允许您使用字符串而不是类。试试如果django-orm也允许的话。

a = models.ManyToManyField('A') 
# ... 
b = models.ManyToManyField('B') 

更新:根据Django/Python Circular model reference这正是要走的路。

+0

我希望它能工作:) – szaman 2011-03-15 08:18:55

+0

(另外,在SQLAlchemy中,使用字符串代替类只能与DeclarativeBase一起使用。如果直接使用mapper,则不能使用该技术,但你也不需要它) – SingleNegationElimination 2011-03-15 08:25:56

+0

它的工作原理 - 简单的解决方案是最好的:)非常感谢 – szaman 2011-03-15 10:03:06