2011-03-15 15 views
5

Tengo dos clases con el fin:declaración adelantada de clases en Python

class A(models): 
    ... 

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

ahora tengo que cambiar mi modelo a uno a continuación:

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

class B(models): 
    ... 

Tengo que usar las migraciones al sur. Quería crear un campo de muchos a muchos en la clase A, migrar datos y eliminar el campo de la clase B. El problema es que ambos están en el mismo modelo. Entonces cuando pongo muchos a muchos en la clase A, no se puede ver. Porque la declaración B está debajo de A. ¿Cómo resolver este problema?

+0

Posible duplicado de [modelos de Django: referencias mutuas entre dos clases e imposibilidad de usar la declaración directa en python] (http://stackoverflow.com/questions/7298326/django-models-mutual-references-between-two-classes -and-impossibility-to-use-fo) –

Respuesta

9

Al menos SQLAlchemy le permite utilizar una cadena en lugar de una clase. Pruebe si django-orm también lo permite.

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

Actualización: Según Django/Python Circular model reference eso es exactamente el camino a seguir.

+0

Espero que funcione :) – szaman

+0

(Por otro lado, en SQLAlchemy el uso de cadenas en lugar de clases funciona solo con DeclarativeBase. Si está utilizando mapper directamente, no puede usar esa técnica , pero tampoco lo necesita) – SingleNegationElimination

+0

Funcionó: las soluciones simples son las mejores :) muchas gracias – szaman