From e7308204096b9b4c35754f0a60bb63dea674b8a9 Mon Sep 17 00:00:00 2001 From: mizhexiaoxiao <1157861072@qq.com> Date: Mon, 30 Oct 2023 15:47:54 +0800 Subject: [PATCH] Update --- app/models/admin.py | 4 ++-- app/models/base.py | 51 ++++++++++++------------------------------ app/settings/config.py | 1 + 3 files changed, 17 insertions(+), 39 deletions(-) diff --git a/app/models/admin.py b/app/models/admin.py index 93b2df6..d62dd26 100644 --- a/app/models/admin.py +++ b/app/models/admin.py @@ -2,7 +2,7 @@ from tortoise import fields from app.schemas.menus import MenuType -from .base import BaseModel, CustomDatetimeField, TimestampMixin +from .base import BaseModel, TimestampMixin from .enums import MethodType @@ -14,7 +14,7 @@ class User(BaseModel, TimestampMixin): password = fields.CharField(max_length=128, null=True, description="密码") is_active = fields.BooleanField(default=True, description="是否激活") is_superuser = fields.BooleanField(default=False, description="是否为超级管理员") - last_login = CustomDatetimeField(null=True, description="最后登录时间") + last_login = fields.DatetimeField(null=True, description="最后登录时间") roles = fields.ManyToManyField("models.Role", related_name="user_roles") class Meta: diff --git a/app/models/base.py b/app/models/base.py index 0254877..51e5c05 100644 --- a/app/models/base.py +++ b/app/models/base.py @@ -1,16 +1,8 @@ -import datetime -import functools -from typing import Any, Optional +from datetime import datetime -from tortoise import fields, models, timezone +from tortoise import fields, models -try: - from ciso8601 import parse_datetime -except ImportError: # pragma: nocoverage - from iso8601 import parse_date - - parse_datetime = functools.partial(parse_date, default_timezone=None) -from tortoise.timezone import get_timezone, localtime +from app.settings import settings class BaseModel(models.Model): @@ -19,10 +11,17 @@ class BaseModel(models.Model): async def to_dict(self, m2m=False): d = {} for field in self._meta.db_fields: - d[field] = getattr(self, field) + value = getattr(self, field) + if isinstance(value, datetime): + value = value.strftime(settings.DATETIME_FORMAT) + d[field] = value if m2m: for field in self._meta.m2m_fields: - values = await getattr(self, field).all().values() + values = [value for value in await getattr(self, field).all().values()] + for value in values: + value.update( + (k, v.strftime(settings.DATETIME_FORMAT)) for k, v in value.items() if isinstance(v, datetime) + ) d[field] = values return d @@ -34,28 +33,6 @@ class UUIDModel: uuid = fields.UUIDField(unique=True, pk=False) -class CustomDatetimeField(fields.DatetimeField): - def to_python_value(self, value: Any) -> Optional[datetime.datetime]: - if value is None: - value = None - else: - if isinstance(value, datetime.datetime): - value = value.strftime("%Y-%m-%d %H:%M:%S") - elif isinstance(value, int): - value = datetime.datetime.fromtimestamp(value) - value = value.strftime("%Y-%m-%d %H:%M:%S") - else: - value = parse_datetime(value) - if timezone.is_naive(value): - value = timezone.make_aware(value, get_timezone()) - value = value.strftime("%Y-%m-%d %H:%M:%S") - else: - value = localtime(value) - value = value.strftime("%Y-%m-%d %H:%M:%S") - self.validate(value) - return value - - class TimestampMixin: - created_at = CustomDatetimeField(auto_now_add=True) - updated_at = CustomDatetimeField(auto_now=True) + created_at = fields.DatetimeField(auto_now_add=True) + updated_at = fields.DatetimeField(auto_now=True) diff --git a/app/settings/config.py b/app/settings/config.py index 4c4ed53..85d986c 100644 --- a/app/settings/config.py +++ b/app/settings/config.py @@ -53,6 +53,7 @@ class Settings(BaseSettings): "use_tz": False, "timezone": "Asia/Shanghai", } + DATETIME_FORMAT: str = "%Y-%m-%d %H:%M:%S" settings = Settings()