Adding attributes into Django Model's Meta class
I don't know about elegant, but one pragmatic way is:
import django.db.models.options as optionsoptions.DEFAULT_NAMES = options.DEFAULT_NAMES + ('schema',)
Obviously, this would break if Django ever added a 'schema' attribute of its own. But hey, it's a thought...you could always pick an attribute name which is less likely to clash.
Not a direct answer, but I did not like the idea of adding it in every model where I need it to the options, so I did:
class MyModel(models.Model): class Meta: ordering = ["myfield"] class MyPrefixMeta: my_value = "Abc"
You could even put this to a abstract model and validate the set class properties in __init__
function or do things like adding a _myprefix_meta
property to the model. So you had your own meta class.
This works for me for setting extra fields in meta for a Django model.
class Vendor(CustomModel): def __init__(self, *args, **kwargs): cls = self.__class__ meta = getattr(cls, '_meta', None) setattr(meta, 'exclude_logging', ["otp", "is_otp_verified"]) super().__init__(*args, **kwargs)
This exclude_logging
field can be accessed as below.
class CustomModel(models.Model): objects = UpdateManager() class Meta: abstract = True def save(self, *args, **kwargs): print(self._meta.exclude_logging)
I hope this solves the problem.