Переименование моделей (таблиц) в Django

поэтому я уже создал модели в Django для своей базы данных, но теперь хочу переименовать модель. Я изменил имена в классе Meta, а затем выполнил миграцию/миграцию, но это просто создает новые таблицы.

Я также пробовал schemamigration, но тоже не работал, я использую Django 1.7.

Вот моя модель

class ResultType(models.Model):
    name = models.CharField(max_length=150)
    ut = models.DateTimeField(default=datetime.now)
    class Meta:
       db_table = u'result_type'

    def __unicode__(self):
        return self.name

Ваше здоровье


person Toby Green    schedule 27.11.2014    source источник


Ответы (1)


Джанго не знает, что вы пытаетесь сделать. По умолчанию он удалит старую таблицу и создаст новую. Вам нужно создать пустую миграцию, а затем использовать эту операцию (вам нужно написать ее самостоятельно):

https://docs.djangoproject.com/en/stable/ref/migration-operations/#renamemodel

Что-то вроде этого:

from django.db import migrations

class Migration(migrations.Migration):

    dependencies = [
        ('yourappname', '0001_initial'),
    ]

    operations = [
        migrations.RenameModel("OldName", "NewName")
    ]
person coldmind    schedule 27.11.2014
comment
Я думаю, что мой django не синхронизирован, ошибка В ваших моделях есть изменения, которые еще не отражены в миграции, поэтому они не будут применены. Запустите «manage.py makemigrations», чтобы выполнить новые миграции, а затем повторно запустите «manage.py migrate», чтобы применить их. Я удалил все 0001_initial.py, а затем создал миграцию с моим новым классом. - person Toby Green; 28.11.2014
comment
Я хочу переименовать таблицу, потому что я переименовываю приложение. Как я могу этого добиться? - person Csaba Toth; 10.06.2016
comment
Итак, чтобы создать пустую миграцию: ./manage.py makemigrations --empty myapp. - person Ehvince; 12.07.2016
comment
NameError: name 'operations' is not defined. В документах нет примеров, поэтому они не очень полезны. - person CoderGuy123; 24.10.2016
comment
После этого вопроса кажется, что operations (внутри списка) выше должно быть migrations. Я изменил это слово, и мой код заработал. - person CoderGuy123; 24.10.2016
comment
@Deleet Очевидно, для моего примера вы должны импортировать from django.db.migrations import operations - person coldmind; 24.10.2016
comment
Пробовал это. Не сработало. Замена слова, как описано выше, сработала. - person CoderGuy123; 24.10.2016
comment
конечно, вы можете пропустить что-то в своем примере и сказать тем, кто указывает на ошибку, очевидно, что вы забыли об этом. конечно, конечно... - person igorsantos07; 28.11.2017