Field type attributes not permitted on models
|Reported by:||john.arnfield@…||Owned by:||nobody|
|Component:||Database layer (models, ORM)||Version:||1.4|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
I have a situation where I need to reference a django model-field type in my models, something that would look like the following:
from django.db import models class MyModel(models.Model): referenced_field = models.CharField # ... field declarations here
The omission of parenthesis on the CharField is intentional. I do not want to create a field on this model, I simply need to reference a field type that this model is associated with.
Unfortunately this causes a type error:
TypeError: Error when calling the metaclass bases unbound method contribute_to_class() must be called with AutoField instance as first argument (got ModelBase instance instead)
This is down to ModelBase.add_to_class being overly naive in the way it calls contribute_to_class (it uses hasattr to check for things that define contribute_to_class, but doesn't care if they're types or objects).
One solution to this problem would be to change the class attribute in to a classmethod, but the problem seems a little unnecessary and feels like it should be cleaned up regardless. Unfortunately, I'm not sure what the ideal solution would be for this case, else I'd already have submit a patch.