I'm not sure if this warrants a DEP, so I've decided to post it to the list first. If this needs to be a DEP, just let me know and I'll follow the DEP process.
-------------
Assume the following scenario:
1. At some point in history, project A was deployed in production and was very successful.
2. The project created a table called `transactions_log`, which is now considerably big and full of very valuable data, that we want to retain.
3. Because of $reasons$, project B gets started as a future replacement of project B
4. Project B wants to reuse `transactions_log` and the `transaction.models.Log` model unaltered
What we have is a 'split' between what the initial migration for the `transaction.models.Log` model should do, between dev and production:
* On local dev, it simply creates the table
* On production, the migration must be faked.
Traditionally, we would go to the person in charge of migration and tell them 'Hey, migration `transactions.0001_initial` must be faked'.
But this seems error-prone. That information ('fake this one specific migration') could be lost in the communication workflow, and imposes the cognitive burden of having to remember another special case.
Proposed solution
------------------------
Assume the following settings files:
```
# settings/local.py
# ..usual list of settings...
```
```
# settings/production.py
MIGRATION_FAKE = (
('transactions', '0001_initial),
)
```
* On `django-admin.py migrate --settings=settings.local`, the migration `transactions.0001` will be faked only if the `--fake` flag is passed (previous behavior).
* On `django-admin.py migrate --settings=settings.production`, the migration `transactions.0001` will *always* be faked. The new setting will act as an ad-hoc, per-migration override of the global `--fake` option.
Thank you,
–Flavio.