feat(core): Add a badge serializer field.

ref: #345 #346
This commit is contained in:
2024-10-12 17:45:47 +09:30
parent 07ceae6471
commit c0cf657bea
2 changed files with 78 additions and 0 deletions

44
app/core/classes/badge.py Normal file
View File

@ -0,0 +1,44 @@
from core.classes.icon import Icon
class Badge:
icon: Icon
text: str
text_style:str
url:str
def __init__(self,
icon_name: str = None,
icon_style: str = None,
text: str = None,
text_style: str = None,
url: str = None
):
self.icon = Icon(
name=icon_name,
style = icon_style
)
self.text = text
self.text_style = text_style
self.url = url
@property
def to_json(self):
return {
'icon': self.icon.to_json,
'text': self.text,
'text_style': self.text_style,
'url': self.url,
}

34
app/core/fields/badge.py Normal file
View File

@ -0,0 +1,34 @@
from rest_framework import serializers
from rest_framework.fields import empty
from core.classes.badge import Badge
from core.fields.icon import Icon, IconField
class BadgeField(serializers.Field):
source = ''
label = ''
def __init__(self, *, read_only=True, write_only=False,
required=None, default=empty, initial=empty, source=None,
label=None, help_text=None, style=None,
error_messages=None, validators=None, allow_null=False):
super().__init__(read_only=read_only, write_only=write_only,
required=required, default=default, initial=initial, source=source,
label=label, help_text=help_text, style=style,
error_messages=error_messages, validators=validators, allow_null=allow_null)
def to_representation(self, badge: Badge):
return badge.to_json
def to_internal_value(self, data):
return Badge(data.icon,data.colour, data.url)