2023-12-06 23:30:01 +00:00
|
|
|
from django.db import models
|
2024-03-24 21:59:25 +00:00
|
|
|
import markdown
|
2023-12-06 23:30:01 +00:00
|
|
|
|
2024-01-10 21:59:54 +00:00
|
|
|
class Tag(models.Model):
|
|
|
|
__yamdl__ = True
|
|
|
|
|
|
|
|
slug = models.SlugField(max_length=128, primary_key=True)
|
|
|
|
|
|
|
|
content = models.TextField()
|
|
|
|
|
|
|
|
|
2023-12-06 23:30:01 +00:00
|
|
|
class Page(models.Model):
|
|
|
|
__yamdl__ = True
|
|
|
|
|
|
|
|
title = models.CharField(max_length=255)
|
|
|
|
|
2024-03-24 21:59:25 +00:00
|
|
|
raw_content = models.TextField()
|
2023-12-06 23:30:01 +00:00
|
|
|
content = models.TextField()
|
2024-01-10 21:59:54 +00:00
|
|
|
slug = models.CharField(max_length=128, unique=True, db_index=True, default=None, null=True)
|
|
|
|
|
|
|
|
tags = models.ManyToManyField(Tag)
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def from_yaml(cls, **data):
|
|
|
|
tags = data.pop("tags", None)
|
2024-03-24 21:59:25 +00:00
|
|
|
|
|
|
|
content = data.pop("content")
|
|
|
|
data["raw_content"] = content
|
|
|
|
data["content"] = markdown.markdown(content)
|
|
|
|
|
2024-01-10 21:59:54 +00:00
|
|
|
instance = cls.objects.create(**data)
|
|
|
|
|
|
|
|
if tags:
|
|
|
|
instance.tags.set(tags)
|
|
|
|
|
|
|
|
return instance
|