Как изменить имена полей модели между собой в Django?

Я создал модель в своем проекте Django. По ошибке я задал поля date_created и date_updated неправильно следующим образом:

class Article(models.Model):
    date_created = models.DateTimeField(auto_now=True)
    date_updated = models.DateTimeField(auto_now_add=True)

Я должен был установить date_created как auto_now_add=True, а date_updated как auto_now=True. Теперь, когда я хочу изменить имена моделей друг на друга, как

class Article(models.Model):
    date_updated = models.DateTimeField(auto_now=True)
    date_created = models.DateTimeField(auto_now_add=True)

Django обнаруживает, что я только что изменил определение полей, и создает миграцию как

    operations = [
        migrations.AlterField(
            model_name='article',
            name='date_created',
            field=models.DateTimeField(auto_now_add=True),
        ),
        migrations.AlterField(
            model_name='article',
            name='date_updated',
            field=models.DateTimeField(auto_now=True),
        ),
    ]

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

Переименование с другим именем может быть решением, но мне нужно сохранить имена полей. Что я могу сделать в этой ситуации?

Отредактируйте файл миграции с тремя переименованиями:

operations = [
    migrations.RenameField(
        model_name='article',
        old_name='date_created',
        name='date_updated1',
    ),
    migrations.RenameField(
        model_name='article',
        old_name='date_updated',
        name='date_created',
    ),
    migrations.RenameField(
        model_name='article',
        old_name='date_updated1',
        name='date_updated',
    ),
]

Таким образом, в конечном итоге два поля поменяются местами.

Вернуться на верх