def __init__(self, verbose_name=None, name=None, markup_type=None, default_markup_type=None, **kwargs): if markup_type and default_markup_type: raise ValueError('Cannot specify both markup_type and default_markup_type') self.default_markup_type = markup_type or default_markup_type markup_types = renderer.list_filters() if self.default_markup_type and (not self.default_markup_type in markup_types): raise ValueError('Invalid markup type, allowed values: %s' % \ ', '.join(renderer.list_filters())) self.markup_type_editable = markup_type is None super(MarkupField, self).__init__(verbose_name, name, **kwargs)
def contribute_to_class(self, cls, name): keys = renderer.list_filters() markup_type_field = models.CharField(max_length=30, choices=[(k, k) for k in keys], default=self.default_markup_type, editable=self.markup_type_editable, blank=self.blank) rendered_field = models.TextField(editable=False) markup_type_field.creation_counter = self.creation_counter + 1 rendered_field.creation_counter = self.creation_counter + 2 cls.add_to_class(_markup_type_field_name(name), markup_type_field) cls.add_to_class(_rendered_field_name(name), rendered_field) super(MarkupField, self).contribute_to_class(cls, name) setattr(cls, self.name, MarkupDescriptor(self))