from tortoise import fields, models from pydantic import BaseModel, ConfigDict from tortoise.contrib.pydantic.creator import pydantic_model_creator, pydantic_queryset_creator from tortoise.queryset import QuerySet class UTTFund(models.Model): id = fields.IntField(pk=True) symbol = fields.CharField(max_length=20, unique=True) name = fields.CharField(max_length=100) @staticmethod async def get_list(data): if type(data) == type([UTTFund]): parser=pydantic_queryset_creator(UTTFund) return await parser.from_queryset(data) async def to_dict(self): if type(self) == UTTFund: parser=pydantic_model_creator(UTTFund) return await parser.from_tortoise_orm(self) class UTTFundData(models.Model): id = fields.IntField(pk=True) fund = fields.ForeignKeyField("models.UTTFund", related_name="data") date = fields.DateField() nav_per_unit = fields.FloatField() sale_price_per_unit = fields.FloatField() repurchase_price_per_unit = fields.FloatField() outstanding_number_of_units = fields.BigIntField() net_asset_value = fields.BigIntField() @classmethod async def get_list(data): if type(data) == QuerySet: parser=pydantic_queryset_creator(UTTFundData) return await parser.from_queryset(data) async def to_dict(self): if type(self) == models.Model: parser=pydantic_model_creator(UTTFundData) return await parser.from_tortoise_orm(self) class Meta: unique_together = ("fund", "date")