2025.09.17-19:07:57
This commit is contained in:
@@ -4,10 +4,21 @@ from django.utils.translation import gettext_lazy as _
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.utils.safestring import mark_safe,SafeText
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
from tinywiki.enums import WIKI_CONTENT_TYPES, WikiContentType
|
||||
from tinywiki.enums import WIKI_CONTENT_TYPES, WIKI_PAGE_STATUS, WikiContentType, WikiPageStatus
|
||||
import markdown
|
||||
import bbcode
|
||||
from .parser import parse_bbcode
|
||||
from . import settings
|
||||
import tinywiki
|
||||
|
||||
def get_tinywiki_default_user():
|
||||
UserModel = get_user_model()
|
||||
try:
|
||||
user = UserModel.objects.get(**settings.TINYWIKI_USER_LOOKUP)
|
||||
except UserModel.DoesNotExist:
|
||||
user = UserModel.objects.filter(is_superuser=True).order_by('pk')[0]
|
||||
return user
|
||||
|
||||
class Page(models.Model):
|
||||
slug = models.SlugField(_("slug"),
|
||||
@@ -20,11 +31,16 @@ class Page(models.Model):
|
||||
null=False,
|
||||
blank=False)
|
||||
author = models.ForeignKey(get_user_model(),
|
||||
on_delete=models.SET_NULL,
|
||||
on_delete=models.SET_DEFAULT,
|
||||
default=get_tinywiki_default_user,
|
||||
verbose_name=_("author"),
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="tinywiki_athors")
|
||||
status_data = models.CharField(_("status"),
|
||||
choices=[(i.value,i.str_lazy) for i in WIKI_PAGE_STATUS],
|
||||
max_length=15,
|
||||
null=False,
|
||||
blank=False,
|
||||
default=WikiPageStatus.IN_PROGRESS.value)
|
||||
content_type_data = models.CharField(_("content type"),
|
||||
choices=[(i.value,i.str_lazy) for i in WIKI_CONTENT_TYPES],
|
||||
default=WikiContentType.BBCODE.value)
|
||||
@@ -37,34 +53,52 @@ class Page(models.Model):
|
||||
created_at = models.DateTimeField(_("created at"),
|
||||
auto_now_add=True)
|
||||
created_by = models.ForeignKey(get_user_model(),
|
||||
on_delete=models.SET_NULL,
|
||||
on_delete=models.SET_DEFAULT,
|
||||
verbose_name=_("created by"),
|
||||
null=True,
|
||||
blank=True,
|
||||
default=get_tinywiki_default_user,
|
||||
related_name="tinywiki_created")
|
||||
|
||||
last_edited_at = models.DateTimeField(_("last edited at"),
|
||||
auto_now=True)
|
||||
last_edited_by = models.ForeignKey(get_user_model(),
|
||||
on_delete=models.SET_NULL,
|
||||
on_delete=models.SET_DEFAULT,
|
||||
verbose_name=_("last edited by"),
|
||||
null=True,
|
||||
blank=True,
|
||||
default=get_tinywiki_default_user,
|
||||
related_name="tinywiki_last_edited")
|
||||
|
||||
@property
|
||||
def content_type(self)->WikiContentType:
|
||||
return WikiContentType.from_string(self.content_type_data)
|
||||
|
||||
@content_type.setter
|
||||
def content_type(self,content_type:str|WikiContentType):
|
||||
if isinstance(content_type,str):
|
||||
self.content_type_data = WikiContentType.from_string(content_type).value
|
||||
elif isinstance(content_type,WikiContentType):
|
||||
self.content_type_data = content_type.value
|
||||
else:
|
||||
raise TypeError("content_type")
|
||||
|
||||
@property
|
||||
def status(self)->WikiPageStatus:
|
||||
return WikiPageStatus.from_string(self.status_data)
|
||||
@status.setter
|
||||
def status(self,status:str|WikiPageStatus):
|
||||
if isinstance(status,str):
|
||||
self.status_data = WikiPageStatus.from_string(status).value
|
||||
elif isinstance(status,WikiPageStatus):
|
||||
self.status_data = status.value
|
||||
else:
|
||||
raise TypeError("status")
|
||||
|
||||
@property
|
||||
def html_content(self)->SafeText|str:
|
||||
if self.content_type == WikiContentType.MARKDOWN:
|
||||
return mark_safe(markdown.markdown(self.content))
|
||||
elif self.content_type == WikiContentType.BBCODE:
|
||||
return mark_safe(bbcode.render_html(self.content))
|
||||
return mark_safe(parse_bbcode(self.content))
|
||||
return self.content
|
||||
|
||||
|
||||
|
||||
class Image(models.Model):
|
||||
models.ManyToManyField(Page, verbose_name=_(""))
|
||||
slug = models.SlugField(_("slug"),
|
||||
@@ -81,10 +115,9 @@ class Image(models.Model):
|
||||
upload_to="tinywiki/img")
|
||||
|
||||
uploaded_by = models.ForeignKey(get_user_model(),
|
||||
on_delete=models.SET_NULL,
|
||||
on_delete=models.SET_DEFAULT,
|
||||
verbose_name=_("uploaded by"),
|
||||
null=True,
|
||||
blank=True,
|
||||
default=get_tinywiki_default_user,
|
||||
related_name="tinywiki_image_uploads")
|
||||
uploaded_at = models.DateTimeField(_("uploaded at"),
|
||||
auto_now_add=True)
|
||||
|
||||
Reference in New Issue
Block a user