from django.db import models from django.db.models import * def hack_subclasses(*field_class_names, **kwargs): old_base = kwargs['old_base'] new_base = kwargs['new_base'] for subclass in old_base.__subclasses__(): if subclass is not new_base: if not field_class_names or subclass.__name__ in field_class_names: if old_base in subclass.__bases__: bases = list(subclass.__bases__) i = 0 for base in bases: if base is old_base: bases[i] = new_base i += 1 subclass.__bases__ = tuple(bases) class Field(models.Field): def __init__(self, *args, **kwargs): try: self.html_attributes = kwargs.pop('html_attributes') except KeyError, e: self.html_attributes = {} models.Field.__init__(self, *args, **kwargs) hack_subclasses('CharField', 'TextField', old_base=models.Field, new_base=Field) ### OVERRIDEN MODEL FIELDS import forms # relative import class CharField(models.CharField): def get_manipulator_field_objs(self): return [curry(forms.TextField, html_attributes=self.html_attributes)] class TextField(models.TextField): def get_manipulator_field_objs(self): return [curry(forms.LargeTextField, html_attributes=self.html_attributes)]