Opened 5 years ago
Last modified 5 years ago
#32344 closed New feature
Allow arbitrary `deconstructible` class properties to participate in migrations — at Version 1
| Reported by: | Ryan Vinzent | Owned by: | nobody | 
|---|---|---|---|
| Component: | Migrations | Version: | dev | 
| Severity: | Normal | Keywords: | Migrations, ModelState | 
| Cc: | Simon Charette | Triage Stage: | Unreviewed | 
| Has patch: | no | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description (last modified by )
In order to fully take advantage of a custom SchemaEditor class, I need to apply some model level configuration. This configuration can be implemented as a class property on the model, but during the migration, all non-Field class properties are disregarded in the dynamically constructed version of the model's state.
It would be nice if any serializable (or maybe only deconstructible) class property were also able to be included in the migration, so I could add something like this:
class MyPostgresModel(models.Model): postgres_options = PostgresOptions(...)
Currently, postgres_options in this case is not passed to the SchemaEditor.create_model() call during the migration, even if it is serializable. The usefulness of a custom SchemaEditor is hindered if it is unable to see this extra model configuration during migrations, as this is usually the only place that a SchemaEditor is invoked. We are already unable to add any additional Meta options, so it seems like there is not currently a natural place for extra table level configuration that can be tracked by migrations.
This could enable user-defined ModelState in migrations, and allow third-party database backends to more easily participate in the migrations framework.