Skip to content

Instantly share code, notes, and snippets.

@glassresistor
Last active December 17, 2015 03:38
Show Gist options
  • Save glassresistor/5544342 to your computer and use it in GitHub Desktop.
Save glassresistor/5544342 to your computer and use it in GitHub Desktop.
class ContentField(models.ForeignKey):
def __init__(self, *args, **kwargs):
self.encodings = kwargs.pop('encodings')
self.required_fields = set(kwargs.pop('required_fields'))
args = list(args)
args.insert(0, 'basecontent.BaseContent')
super(ContentField, self).__init__(*args,**kwargs)
class ExtendedContent(models.Model):
"""
Base model for collections of content to be used in building compiled
content.
"""
slug = models.SlugField(max_length=200, unique=True, db_index=True)
metadata = JSONField()
def __init__(self, *args, **kwargs):
super(ExtendedContent, self).__init__(*args, **kwargs)
def render(self, context):
raise NotImplemented("Not Implemented for %s" % self.__name__)
def compile_src(self):
dictionary = {}
for field in self._meta.fields:
value = getattr(self, field.name)
if issubclass(field, fields.ContentField):
item = {
'metadata': value.metadata,
'content': value.content,
}
elif :
item = value
return dictionary
class Article(ExtendedContent):
"""
Test model for Articles.
"""
body = fields.ContentField(encodings=['md','html'],
required_fields=['title','description'])
publish_date = models.DateTimeField()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment