with what tutorial meet español develop applications django django-1.7 django-migrations

what - meet django



Agregue un campo no nulo y único con el modelo ya completado (2)

Tengo un modelo en mi aplicación que se ejecuta en un servidor con algunas entradas. Necesito agregar un SlugField , único y no nulo para este modelo. El SlugField será poblado basado en trading_name . He cambiado mi modelo para agregar este nuevo campo y modificar el método de guardado:

class Supplier(StatusModel): SLUG_MAX_LENGTH = 210 slug = models.SlugField(unique=True, max_length=SLUG_MAX_LENGTH) trading_name = models.CharField(max_length=200, verbose_name=_(''trading name'')) ... def save(self, *args, **kwargs): self.slug = orig = slugify(self.trading_name)[:Supplier.SLUG_MAX_LENGTH] for x in itertools.count(1): if not Supplier.objects.filter(slug=self.slug).exists(): break # Truncate the original slug dynamically. Minus 1 for the hyphen. self.slug = "%s-%d" % (orig[:Supplier.SLUG_MAX_LENGTH - len(str(x)) - 1], x) self.full_clean() super(Supplier, self).save(*args, **kwargs)

Después de cambiar el modelo, manage.py makemigrations y obtuve esta migración como salida:

class Migration(migrations.Migration): dependencies = [ (''opti'', ''0003_auto_20141226_1755''), ] operations = [ migrations.AddField( model_name=''supplier'', name=''slug'', field=models.SlugField(unique=True, default='''', max_length=210), preserve_default=False, ), ]

No puedo ejecutar manage.py migrate porque el valor predeterminado no funciona debido a la interpretación exclusiva.

Mi pregunta es: ¿Cómo puedo hacer esto con Django 1.7? Necesito aplicar el cambio de esquema y mantener las entradas actuales en mi base de datos.


Desafortunadamente, no encontré respuesta pero pude crear una solución:

  • Primero, he creado una migración que permite que el campo de slug sea anulable;
  • Luego, he creado otra migración que llena la columna de slug con los valores adecuados para cada fila en el modelo;
  • Luego, otra migración que agrega la restricción no-nula en la columna.

manage.py makemigrations cambios de modelo (agregar campo, cambiar, etc.), luego llama a manage.py makemigrations , luego aplica las migraciones con manage.py migrate

Puede agregar el campo con null=True , luego, por ejemplo, crea un script para completarlo una vez

De lo contrario, si necesita rellenar el campo dentro de la migración puede escribir uno personalizado, consulte https://docs.djangoproject.com/en/1.7/ref/migration-operations/#writing-your-own