2011-12-21 5 views
6

ya tengo un modelo,Cómo agregar uno a un campo de relación en un modelo existente a través de la migración Sur

class ModelA(models.Model): 
    name = models.CharField (max_length = 255, blank = False) 

y tengo muchas entradas en él. Ahora quiero agregar un campo en ella, que es

user = models.OneToOneField(User) 

¿Cómo puedo añadir en este campo ModelA? ¿Hay alguna otra solución además de eliminar todas las entradas anteriores?

+0

¿Y cuál es el problema? '--auto' no funciona? – DrTyrsa

+0

'--auto' funciona pero pregunta por el valor predeterminado para las entradas anteriores? – Ahsan

+0

el campo 'user' es' unique = True' y 'null = False' – Ahsan

Respuesta

11

me gustaría utilizar este patrón:

  1. Agregar "user = models.OneToOneField (Usuario, null = True)" a tu modelo (no retire el campo "Nombre")
  2. run ' manage.py schemamigration --auto '. Y aplica la migración. Ahora hay dos columnas en su mesa.
  3. Ahora crea una migración de datos. Edite el archivo: debe recorrer todos los objetos en su modelo y establecer el campo de usuario.
  4. Elimine el "nombre = modelos.CharField" del archivo model.py. Y elimine null = True del campo de usuario.
  5. ejecuta 'manage.py schemamigration --auto'. Y aplicar la migración

BTW, si utiliza OneToOneField() sin null = True, puede establecer primary_key = True en este campo, ya que debe ser único. Pero no sé si South puede manejar esta migración.

+0

después del paso 5, cuando voy a migrar, la migración solicita agregar valor predeterminado para el usuario porque va a NOT NULL desde el estado NULL. Entonces, ¿cuál será el valor predeterminado? cadena vacía no funciona :( – Ahsan

+0

Pruebe 0, o edite el archivo de migración de esquema de creación y proporcione un valor predeterminado de 0. – guettli

+2

El mismo enfoque funciona para las migraciones de Django (sin Sur), con 'python manage.py makemigrations' para pasos 2 y 5. ¡Gracias! – mlncn

Cuestiones relacionadas