title: Django conditionally defined model field in abstract model
body: <p>I've got an abstract model in my project that I want to use to define a field by default on concrete subclasses, but also to allow that field to be redefined as something other than the default dynamically.  All of this works right now:  </p>
  
  <pre><code>class classproperty(object):
      """
      Decorator for making class properties
      """
      def __init__(self, fget):
          self.fget = fget
  
      def __get__(self, owner_self, owner_cls):
          return self.fget(owner_cls)
  
  class BaseModel(models.Model):
      class Meta(object):
          abstract = True
  
      @classproperty
      def _special_attribute_field(self):
          return getattr(self, '_bm_special_attribute_field', 'default')
  
      @property
      def bm_special_attribute(self):
          return getattr(self, self._special_attribute_field)
  </code></pre>
  
  <p>...and then there are a bunch of methods that use the latter two functions to figure out which field to access.  </p>
  
  <p>The problem is that right now, classes inheriting from <code>BaseModel</code> have to define the <code>default</code> field explicitly, even if they don't use <code>_bm_special_attribute_field</code> to specify something other than the default.  What I'd like to do is programmatically define <code>default</code> on concrete submodels <em>only if</em> those models don't use <code>_bm_special_attribute_field</code> to change it to something else, in which case, they should bring their own field.  Is there a way to do this, perhaps with metaclasses?  The key thing being that it has to not muck up the Django machinery.</p>