Możesz bezpośrednio zmienić typ kolumny z int na ciąg. Zwróć uwagę, że jeśli nie jest włączony ścisły tryb sql, liczby całkowite zostaną obcięte do maksymalnej długości łańcucha, a dane zostaną prawdopodobnie utracone, więc zawsze rób kopie zapasowe i wybierz odpowiednio wysoki poziom. Ponadto migracja nie może być łatwo odwrócona (sql nie obsługuje bezpośrednio zmiany kolumny w kolumnie int), więc kopia zapasowa jest w tym przypadku bardzo ważna.
Django pre 1.7/South
Można użyć db.alter_column
. Najpierw utwórz migracji, ale nie stosuje się go jeszcze, albo stracisz dane:
>>> python manage.py schemamigration my_app --auto
Następnie zmień metodę forwards
w tym:
class Migration(SchemaMigration):
def forwards(self, orm):
db.alter_column('some_table', 'id', models.CharField(max_length=255))
def backwards(self, orm):
raise RuntimeError('Cannot reverse this migration.')
to zmieni kolumnę aby dopasować nowe pole CharField
. Teraz zastosuj migrację i gotowe. Aby zmienić kolumnę, można użyć operacji AlterField
. Po pierwsze, należy utworzyć pusty migracji:
>>> python manage.py makemigrations --empty my_app
Następnie dodaj następującą operację:
class Migration(migrations.Migration):
operations = [
migrations.AlterField('some_model', 'id', models.CharField(max_length=255))
]
teraz uruchomić migrację i Django zmieni pole pasujące do nowego CharField
.