﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
35976	Persist original Meta class on Options instances	Tim McCurrach		"When a `model.Model` class is created [https://github.com/django/django/blob/ded485464214a3f69b64402b7d82221279f80008/django/db/models/base.py#L112 the metaclass `pop`s off] any `Meta` attribue defined on the model [https://github.com/django/django/blob/ded485464214a3f69b64402b7d82221279f80008/django/db/models/base.py#L122 before calling] `super.__new__()`. We do [https://github.com/django/django/blob/ded485464214a3f69b64402b7d82221279f80008/django/db/models/base.py#L145 pass it as an argument] to the `Options` class, and [https://github.com/django/django/blob/ded485464214a3f69b64402b7d82221279f80008/django/db/models/options.py#L136 it's stored] on the `Options` instance, however [https://github.com/django/django/blob/ded485464214a3f69b64402b7d82221279f80008/django/db/models/options.py#L232 this is then deleted] whilst the `Options.contribute_to_class` class is called.

As far as I can tell, there is no reason why it is important to delete the original data stored in the class defined on the original model. Admitedly, perhaps it could be stored with a better name to indicate it is a non-functional reference to the original `Meta` class. `instance._meta.meta` probably doesn't make much sense, but `instance._meta.original_meta` might be more appropriate.

=== Motivation for feature request ===

The motivation for this came change is born out of a desire to write a check that `db_table` is explicitly defined on all my models (even if it matches the default value that django would apply). I can write checks that require things like `ordering` is defined (or not defined) on a model. The problem with `db_table` is that defaults are applied when `contribute_to_class` is called. This means we need a reference to the underlying original Meta data. This is not currently possible without subclassing the metaclass (`ModelBase`) which is a step further than would be ideal imo.

=== The fix ===

The fix should be very simple. We would just need to remove (or adapt) the line of code linked above which deletes the meta-class. (We could maybe use a better name than `original_meta`!!)"	New feature	new	Database layer (models, ORM)	5.1	Normal			Tim McCurrach	Unreviewed	0	0	0	0	1	0
