Hey Bibhas,
thank you for the report. I can verify that behavior and would classify it as a release blocker since it leads to potential data loss. Can you open a ticket on
https://code.djangoproject.com/ please.
In general a migration is a collection of operations. The migration will only be unapplied if all operations are reversible. There is no direct way to prevent a migration (file) to be unapplied. I'm not sure if it's worth to add a property / attribute to the migration class to centralize that check. You could open a ticket as well.
As a workaround you can add "migrations.RunPython(lambda apps, schema_editor: None)" as first operation in the operations list for that migration. It is a noop in forwards migrations and not reversible. But in adding a RunPython operation you will lose the ability to squash migrations.
/Markus