Django(1.10.4)迁移不在runpython中应用datetime字段更改(副本)

时间:2017-02-18 09:35:13

标签: django django-migrations

runpython的更改永远不会应用于datetimefield。

我在模型上添加新的datetimefield,其默认值为timezone.now()

模型

date = models.DateTimeField(default=timezone.now)

迁移

operations = [
    migrations.RunPython(add_expense_date),
    migrations.AddField(
        model_name='expense',
        name='date',
        field=models.DateTimeField(default=django.utils.timezone.now),
        preserve_default=False,
    ),]

我写了一个migrations.RunPython方法,将现有字段的另一个字段_created_at的值复制到新字段date

    def add_expense_date(apps, schema_editor):
        Expense = apps.get_model("accounting", "Expense")
        db_alias = schema_editor.connection.alias
        for expense in Expense.objects.using(db_alias).all():
            expense.date = expense._created_at
            expense.save()

问题是,它始终应用defaut值,并且从不在runpython调用中应用更改。但是,runpython方法会被调用。 当我使字段为空时,它默认所有值为null而不是runpython调用中的更改

0 个答案:

没有答案