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


У меня есть это поле,

job_created = models.DateTimeField(auto_now_add=True)

Теперь я хочу добавить что-то вроде этого, как основать значение по умолчанию на post_created. Я хочу, чтобы первый last_modified был при создании задания, я хочу что-то вроде

last_modified = models.DateTimeField(auto_now=True, default = post_created)

Или если я предоставляю один дефолт во время выполнения миграции, как это сделать?

1 3

1 ответ:

По существу, вы не можете, но вы можете просто создать миграцию данных

def set_last_modified(apps, schema_editor):
    MyModel = apps.get_model('myapp', 'MyModel')

    for obj in MyModel.objects.all():
        obj.last_modified = obj.post_created
        obj.save()


class Migration(migrations.Migration):

    dependencies = [
        ('myapp', 'previous_migration'),
    ]

    operations = [
        # Doesn't need to do anything in reverse, models have not been changed
        migrations.RunPython(set_last_modified, migrations.RunPython.noop)
    ]

Вы должны получить шаблон для этой миграции, запустив

migrations --empty yourappname