class DecimalFields(Model): id = fields.IntField(pk=True) decimal = fields.DecimalField(max_digits=18, decimal_places=4) decimal_nodec = fields.DecimalField(max_digits=18, decimal_places=0) decimal_null = fields.DecimalField(max_digits=18, decimal_places=4, null=True)
class Participant(models.Model): ''' This defines a Participant of a Match ''' id = fields.IntField(pk=True) api_id = fields.CharField(max_length=255) player_name = fields.CharField(max_length=255) damage = fields.DecimalField(max_digits=10, decimal_places=2, null=True) kills = fields.IntField(null=True) knocks = fields.IntField(null=True) placement = fields.IntField(null=True) player = fields.ForeignKeyField('api.Player', on_delete=fields.CASCADE, null=True) is_ai = fields.BooleanField(default=False, null=True) swim_distance = fields.DecimalField(max_digits=10, decimal_places=2, null=True) ride_distance = fields.DecimalField(max_digits=10, decimal_places=2, null=True) walk_distance = fields.DecimalField(max_digits=10, decimal_places=2, null=True) def __str__(self) -> str: return "{} - {}".format(self.api_id, self.player_name)
class Investment(SluggableModel): name = fields.CharField(max_length=50, unique=True) description = fields.TextField() min_amount = fields.DecimalField(max_digits=18, decimal_places=2) roi = fields.DecimalField(max_digits=4, decimal_places=1, null=True) duration = fields.IntField() image_url = fields.CharField(max_length=250)
class Journal(Model): timestamp = fields.DatetimeField(auto_now_add=True) level = fields.SmallIntField(index=True) text = fields.CharField(max_length=255, index=True) col_float1 = fields.FloatField(default=2.2) col_smallint1 = fields.SmallIntField(default=2) col_int1 = fields.IntField(default=2000000) col_bigint1 = fields.BigIntField(default=99999999) col_char1 = fields.CharField(max_length=255, default='value1') col_text1 = fields.TextField( default='Moo,Foo,Baa,Waa,Moo,Foo,Baa,Waa,Moo,Foo,Baa,Waa') col_decimal1 = fields.DecimalField(12, 8, default=Decimal('2.2')) col_json1 = fields.JSONField(default={ 'a': 1, 'b': 'b', 'c': [2], 'd': { 'e': 3 }, 'f': True }) col_float2 = fields.FloatField(null=True) col_smallint2 = fields.SmallIntField(null=True) col_int2 = fields.IntField(null=True) col_bigint2 = fields.BigIntField(null=True) col_char2 = fields.CharField(max_length=255, null=True) col_text2 = fields.TextField(null=True) col_decimal2 = fields.DecimalField(12, 8, null=True) col_json2 = fields.JSONField(null=True) col_float3 = fields.FloatField(default=2.2) col_smallint3 = fields.SmallIntField(default=2) col_int3 = fields.IntField(default=2000000) col_bigint3 = fields.BigIntField(default=99999999) col_char3 = fields.CharField(max_length=255, default='value1') col_text3 = fields.TextField( default='Moo,Foo,Baa,Waa,Moo,Foo,Baa,Waa,Moo,Foo,Baa,Waa') col_decimal3 = fields.DecimalField(12, 8, default=Decimal('2.2')) col_json3 = fields.JSONField(default={ 'a': 1, 'b': 'b', 'c': [2], 'd': { 'e': 3 }, 'f': True }) col_float4 = fields.FloatField(null=True) col_smallint4 = fields.SmallIntField(null=True) col_int4 = fields.IntField(null=True) col_bigint4 = fields.BigIntField(null=True) col_char4 = fields.CharField(max_length=255, null=True) col_text4 = fields.TextField(null=True) col_decimal4 = fields.DecimalField(12, 8, null=True) col_json4 = fields.JSONField(null=True)
class Journal(Model): timestamp = fields.DatetimeField(auto_now_add=True) level = fields.SmallIntField(index=True) text = fields.CharField(max_length=255, index=True) col_float1 = fields.FloatField(default=2.2) col_smallint1 = fields.SmallIntField(default=2) col_int1 = fields.IntField(default=2000000) col_bigint1 = fields.BigIntField(default=99999999) col_char1 = fields.CharField(max_length=255, default="value1") col_text1 = fields.TextField( default="Moo,Foo,Baa,Waa,Moo,Foo,Baa,Waa,Moo,Foo,Baa,Waa") col_decimal1 = fields.DecimalField(12, 8, default=Decimal("2.2")) col_json1 = fields.JSONField(default={ "a": 1, "b": "b", "c": [2], "d": { "e": 3 }, "f": True }) col_float2 = fields.FloatField(null=True) col_smallint2 = fields.SmallIntField(null=True) col_int2 = fields.IntField(null=True) col_bigint2 = fields.BigIntField(null=True) col_char2 = fields.CharField(max_length=255, null=True) col_text2 = fields.TextField(null=True) col_decimal2 = fields.DecimalField(12, 8, null=True) col_json2 = fields.JSONField(null=True) col_float3 = fields.FloatField(default=2.2) col_smallint3 = fields.SmallIntField(default=2) col_int3 = fields.IntField(default=2000000) col_bigint3 = fields.BigIntField(default=99999999) col_char3 = fields.CharField(max_length=255, default="value1") col_text3 = fields.TextField( default="Moo,Foo,Baa,Waa,Moo,Foo,Baa,Waa,Moo,Foo,Baa,Waa") col_decimal3 = fields.DecimalField(12, 8, default=Decimal("2.2")) col_json3 = fields.JSONField(default={ "a": 1, "b": "b", "c": [2], "d": { "e": 3 }, "f": True }) col_float4 = fields.FloatField(null=True) col_smallint4 = fields.SmallIntField(null=True) col_int4 = fields.IntField(null=True) col_bigint4 = fields.BigIntField(null=True) col_char4 = fields.CharField(max_length=255, null=True) col_text4 = fields.TextField(null=True) col_decimal4 = fields.DecimalField(12, 8, null=True) col_json4 = fields.JSONField(null=True)
class Trade(Model): id = fields.IntField(pk=True) symbol = fields.CharField(max_length=5) trader = fields.CharField(36) side = fields.IntEnumField(enum_type=TradeSide) quantity = fields.DecimalField(decimal_places=6, max_digits=20) price = fields.DecimalField(decimal_places=6, max_digits=20) slippage = fields.DecimalField(decimal_places=6, max_digits=20) level = fields.BigIntField() timestamp = fields.DatetimeField()
class Position(Model): id = fields.IntField(pk=True) symbol = fields.CharField(max_length=5) trader = fields.CharField(36) shares_qty = fields.BigIntField(default=0) avg_share_px = fields.DecimalField(decimal_places=6, max_digits=20, default=0) realized_pl = fields.DecimalField(decimal_places=6, max_digits=20, default=0)
class Offer(BaseModel): value = fields.DecimalField(14, 2) installments = fields.SmallIntField() tax_rate_percent_monthly = fields.DecimalField(3, 2) total_value = fields.DecimalField(14, 2) offer_package = fields.ForeignKeyField("models.OfferPackage", related_name="offers") partner = fields.ForeignKeyField("models.Partner", related_name="offers_partner") customer = fields.ForeignKeyField("models.Customer", related_name="offers_customer")
class DecimalFields(Model): class Meta: ordering = [ 'id', ] id = fields.IntegerField(primary_key=True) decimal = fields.DecimalField(max_digits=18, decimal_places=4) decimal_nodec = fields.DecimalField(max_digits=18, decimal_places=0) decimal_null = fields.DecimalField(max_digits=18, decimal_places=4, null=True)
class Property(SluggableModel): name = fields.CharField(max_length=50, unique=True) location = fields.CharField(max_length=50) description = fields.TextField() plot_price = fields.DecimalField(max_digits=18, decimal_places=2, null=True) half_plot_price = fields.DecimalField(max_digits=18, decimal_places=2, null=True) promo_price = fields.DecimalField(max_digits=5, decimal_places=2, null=True) is_promo = fields.BooleanField(default=False) image_url = fields.CharField(max_length=250)
def test_max_digits_empty(self): with self.assertRaisesRegex( TypeError, "missing 2 required positional arguments: 'max_digits' and" " 'decimal_places'", ): fields.DecimalField() # pylint: disable=E1120
class Payment(models.Model): id = fields.BigIntField(pk=True) payment_status = fields.CharField(max_length=50) paid = fields.BooleanField(default=False) amount = fields.DecimalField(max_digits=7, decimal_places=2) booking: fields.ForeignKeyRelation[Booking] = fields.ForeignKeyField( "models.Booking", related_name="payment")
class Event(Model): id = fields.BigIntField(pk=True, description="Event ID") name = fields.TextField() tournament: fields.ForeignKeyRelation[Tournament] = fields.ForeignKeyField( "models.Tournament", db_constraint=False, related_name="events", description="FK to tournament", ) participants: fields.ManyToManyRelation["Team"] = fields.ManyToManyField( "models.Team", db_constraint=False, related_name="events", through="teamevents", description="How participants relate", ) modified = fields.DatetimeField(auto_now=True) prize = fields.DecimalField(max_digits=10, decimal_places=2, null=True) token = fields.CharField(max_length=100, description="Unique token", unique=True) key = fields.CharField(max_length=100) class Meta: table_description = "This table contains a list of all the events" unique_together = [("name", "prize"), ["tournament", "key"]]
class Quantity(Model): id = fields.IntField(pk=True) amount = fields.DecimalField(max_digits=38, decimal_places=12) unit = fields.ForeignKeyField('models.Unit', related_name='units') def __str__(self): return f'{self.name}({self.amount};{self.unit})'
class DefaultModel(Model): int_default = fields.IntField(default=1) float_default = fields.FloatField(default=1.5) decimal_default = fields.DecimalField(max_digits=8, decimal_places=2, default=Decimal(1)) bool_default = fields.BooleanField(default=True) char_default = fields.CharField(max_length=20, default="tortoise") date_default = fields.DateField(default=datetime.date.fromisoformat("2020-05-20")) datetime_default = fields.DatetimeField(default=datetime.datetime(year=2020, month=5, day=20))
class Item(Model): id = fields.IntField(pk=True) name = fields.CharField(10, null=False) price = fields.DecimalField(20, 10, null=True) created_at = TimestampField(null=False, auto_now_add=True) updated_at = TimestampField(null=False, auto_now=True) class Meta: table = 'items'
class ThorPoolModel(Model): id = fields.BigIntField(pk=True) block_height = fields.BigIntField(index=True) network = fields.CharField(80, default='testnet', index=True) pool = fields.CharField(128, index=True) balance_asset = fields.DecimalField(30, 0) balance_rune = fields.DecimalField(30, 0) pool_units = fields.DecimalField(30, 0) status = fields.CharField(32, index=True) def __str__(self) -> str: return f'ThorPoolModel(#{self.block_height}, ' \ f'{int(self.balance_asset) / 1e8} {self.pool} vs {int(self.balance_rune) / 1e8} R, ' \ f'{self.status})' @classmethod def from_thor_pool(cls, p: ThorPool, network_id, block_height): return ThorPoolModel( block_height=block_height, network=network_id, pool=p.asset, balance_asset=p.balance_asset_int, balance_rune=p.balance_rune_int, pool_units=p.pool_units_int, status=p.status ) @classmethod async def find_one(cls, network_id: str, block_height: int, pool: str): return await cls.filter(network=network_id, block_height=block_height, pool=pool).first() @classmethod async def find_pools(cls, network_id: str, block_height: int): return await cls.filter(network=network_id, block_height=block_height) @property def assets_per_rune(self): return int(self.balance_asset) / int(self.balance_rune) @property def runes_per_asset(self): return int(self.balance_rune) / int(self.balance_asset)
class User(Model): user_id = fields.IntField(unique=True) username = fields.CharField(max_length=255, null=True) full_name = fields.CharField(max_length=255) balance = fields.DecimalField(max_digits=32, decimal_places=2, default=0) class Meta: table = "users" def __str__(self): return f"[{self.user_id}] {self.full_name}"
class User(BaseModel): app = fields.ManyToManyField("diff_models.App", related_name="users") token = fields.CharField(max_length=20, unique=True, description="认证token") password = fields.CharField(max_length=200) name = fields.CharField(max_length=50, description="姓名") phone = fields.CharField(max_length=20, description="电话号码") email = fields.CharField(max_length=50, description="邮箱地址") balance = fields.DecimalField(max_digits=10, decimal_places=4, default=0, description="账户余额")
class Transaction(Model): id = fields.UUIDField(pk=True) amount = fields.DecimalField(max_digits=19, decimal_places=4) description = fields.TextField(null=True) status: TransactionStatus = fields.CharEnumField( TransactionStatus, default=TransactionStatus.PENDING ) error = fields.TextField(null=True) created_at = fields.DatetimeField(auto_now_add=True) class Meta: abstract = True
class Event(Model): id = fields.IntField(pk=True) name = fields.TextField(unique=True) tournament = fields.ForeignKeyField('models.Tournament', related_name='events') participants = fields.ManyToManyField( 'models.Team', related_name='events', through='event_team' ) modified = fields.DatetimeField(auto_now=True) prize = fields.DecimalField(max_digits=10, decimal_places=2, null=True) token = fields.TextField(default=generate_token) def __str__(self): return self.name
class SomeModel(Model): id = fields.IntField(pk=True) string = fields.CharField(255, null=True) decimal = fields.DecimalField(20, 10, null=True) enum = fields.CharEnumField(SomeEnum, null=True) reversed_enum = ReversedCharEnumField(SomeReversedEnum, null=True) date = fields.DateField(null=True) datetime = fields.DatetimeField(null=True) timedelta = fields.TimeDeltaField(null=True) bool = fields.BooleanField(null=True) relation = fields.ForeignKeyField('models.SomeModel', 'id', null=True) class Meta: # pylint: disable=too-few-public-methods) table = 'test_models'
class Wallet(Model): id = fields.UUIDField(pk=True) # token # To simplify, we assume that we only use one currency. balance = fields.DecimalField(max_digits=19, decimal_places=4, default=0) created_at = fields.DatetimeField(auto_now_add=True) modified_at = fields.DatetimeField(auto_now=True) class Meta: abstract = True async def deposit_money(self, amount: Decimal, connection): if not amount or amount < 0: raise AmountMustBeAPositiveNumber( "The entered amount must be a positive number" ) self.balance += Decimal(amount) await self.save(using_db=connection)
class Event(Model): id = fields.IntField(pk=True, description="Event ID") name = fields.CharField(max_length=255, unique=True) tournament = fields.ForeignKeyField( "models.Tournament", related_name="events", description="FK to tournament" ) participants = fields.ManyToManyField( "models.Team", related_name="events", through="event_team", description="How participants relate", ) modified = fields.DatetimeField(auto_now=True) prize = fields.DecimalField(max_digits=10, decimal_places=2, null=True) token = fields.CharField(max_length=100, description="Unique token", unique=True) class Meta: table_description = "This table contains a list of all the events"
class Event(Model): id = fields.IntField(pk=True) name = fields.CharField(max_length=64) # References to other models are defined in format # "{app_name}.{model_name}" - where {app_name} is defined in tortoise config tournament = fields.ForeignKeyField("models.Tournament", related_name='events') participants = fields.ManyToManyField("models.Team", related_name='events', through='event_team') prize = fields.DecimalField(max_digits=10, decimal_places=2, null=True) created_at = fields.DatetimeField(auto_now=True, description="创建时间") updated_at = fields.DatetimeField(auto_now_add=True, description="修改时间") class Meta: table = "event" table_description = "Event" def __str__(self): return self.name
def test_decimal_places_bad(self): with self.assertRaisesRegex(ConfigurationError, "'decimal_places' must be >= 0"): fields.DecimalField(max_digits=2, decimal_places=-1)
def test_max_fields_bad(self): with self.assertRaisesRegex(ConfigurationError, "'max_digits' must be >= 1"): fields.DecimalField(max_digits=0, decimal_places=2)
def test_decimal_places_empty(self): with self.assertRaisesRegex(TypeError, "missing 1 required positional argument: 'decimal_places'"): fields.DecimalField(max_digits=1) # pylint: disable=E1120
class CODPlayerMatch(models.Model): player = fields.ForeignKeyField('api.CODPlayer', on_delete=fields.CASCADE) title = fields.ForeignKeyField('api.CODTitle', on_delete=fields.CASCADE) item_type = fields.ForeignKeyField('api.CODItemType', on_delete=fields.CASCADE) mode_type = fields.ForeignKeyField('api.CODModeType', on_delete=fields.CASCADE) match_id = fields.CharField(max_length=255, null=True) kills = fields.DecimalField(max_digits=16, decimal_places=2, null=True) gulag_kills = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_teams_wiped = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_last_stand_kill = fields.DecimalField(max_digits=16, decimal_places=2, null=True) wall_bangs = fields.DecimalField(max_digits=16, decimal_places=2, null=True) avg_life_time = fields.DecimalField(max_digits=16, decimal_places=2, null=True) score = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_destroyed_vehicle_light = fields.DecimalField(max_digits=16, decimal_places=2, null=True) kills_per_game = fields.DecimalField(max_digits=16, decimal_places=2, null=True) distance_travelled = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_munitions_box_teammate_used = fields.DecimalField( max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_1 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_2 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_3 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_4 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_5 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_6 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_mission_pickup_tablet = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_reviver = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_kiosk_buy = fields.DecimalField(max_digits=16, decimal_places=2, null=True) time_played = fields.DecimalField(max_digits=16, decimal_places=2, null=True) headshot_percentage = fields.DecimalField(max_digits=16, decimal_places=2, null=True) executions = fields.DecimalField(max_digits=16, decimal_places=2, null=True) matches_played = fields.DecimalField(max_digits=16, decimal_places=2, null=True) gulag_deaths = fields.DecimalField(max_digits=16, decimal_places=2, null=True) nearmisses = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_cache_open = fields.DecimalField(max_digits=16, decimal_places=2, null=True) damage_done = fields.DecimalField(max_digits=16, decimal_places=2, null=True) damage_taken = fields.DecimalField(max_digits=16, decimal_places=2, null=True) team_placement = fields.DecimalField(max_digits=16, decimal_places=2, null=True) team_survival_time = fields.DecimalField(max_digits=16, decimal_places=2, null=True) utc_start_seconds = fields.IntField(null=True) utc_end_seconds = fields.IntField(null=True) rank = fields.DecimalField(max_digits=16, decimal_places=2, null=True) player_count = fields.DecimalField(max_digits=16, decimal_places=2, null=True) headshots = fields.DecimalField(max_digits=16, decimal_places=2, null=True) assists = fields.DecimalField(max_digits=16, decimal_places=2, null=True) deaths = fields.DecimalField(max_digits=16, decimal_places=2, null=True) score_per_minute = fields.DecimalField(max_digits=16, decimal_places=2, null=True) kd_ratio = fields.DecimalField(max_digits=16, decimal_places=2, null=True) def __str__(self) -> str: return f"{self.__class__.__name__} {self.id}"
class CODPlayerTitleStats(models.Model): id = fields.IntField(pk=True) player = fields.ForeignKeyField('api.CODPlayer', on_delete=fields.CASCADE) title = fields.ForeignKeyField('api.CODTitle', on_delete=fields.CASCADE) item_type = fields.ForeignKeyField('api.CODItemType', on_delete=fields.CASCADE) mode_type = fields.ForeignKeyField('api.CODModeType', on_delete=fields.CASCADE, null=True) level = fields.DecimalField(max_digits=16, decimal_places=2, null=True) level_xp_remainder = fields.DecimalField(max_digits=16, decimal_places=2, null=True) level_xp_gained = fields.DecimalField(max_digits=16, decimal_places=2, null=True) prestige = fields.DecimalField(max_digits=16, decimal_places=2, null=True) prestige_id = fields.DecimalField(max_digits=16, decimal_places=2, null=True) total_xp = fields.DecimalField(max_digits=16, decimal_places=2, null=True) paragon_rank = fields.DecimalField(max_digits=16, decimal_places=2, null=True) paragon_id = fields.DecimalField(max_digits=16, decimal_places=2, null=True) match_id = fields.CharField(max_length=255, null=True) gulag_kills = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_teams_wiped = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_last_stand_kill = fields.DecimalField(max_digits=16, decimal_places=2, null=True) wall_bangs = fields.DecimalField(max_digits=16, decimal_places=2, null=True) avg_life_time = fields.DecimalField(max_digits=16, decimal_places=2, null=True) score = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_destroyed_vehicle_light = fields.DecimalField(max_digits=16, decimal_places=2, null=True) kills_per_game = fields.DecimalField(max_digits=16, decimal_places=2, null=True) distance_travelled = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_munitions_box_teammate_used = fields.DecimalField( max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_1 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_2 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_3 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_4 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_5 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_down_enemy_circle_6 = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_mission_pickup_tablet = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_reviver = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_kiosk_buy = fields.DecimalField(max_digits=16, decimal_places=2, null=True) time_played = fields.DecimalField(max_digits=16, decimal_places=2, null=True) headshot_percentage = fields.DecimalField(max_digits=16, decimal_places=2, null=True) executions = fields.DecimalField(max_digits=16, decimal_places=2, null=True) matches_played = fields.DecimalField(max_digits=16, decimal_places=2, null=True) gulag_deaths = fields.DecimalField(max_digits=16, decimal_places=2, null=True) nearmisses = fields.DecimalField(max_digits=16, decimal_places=2, null=True) objective_br_cache_open = fields.DecimalField(max_digits=16, decimal_places=2, null=True) damage_done = fields.DecimalField(max_digits=16, decimal_places=2, null=True) damage_taken = fields.DecimalField(max_digits=16, decimal_places=2, null=True) team_placement = fields.DecimalField(max_digits=16, decimal_places=2, null=True) team_survival_time = fields.DecimalField(max_digits=16, decimal_places=2, null=True) utc_start_seconds = fields.IntField(null=True) utc_end_seconds = fields.IntField(null=True) player_count = fields.IntField(null=True) rank = fields.DecimalField(max_digits=16, decimal_places=2, null=True) player_count = fields.DecimalField(max_digits=16, decimal_places=2, null=True) record_longest_win_streak = fields.DecimalField(max_digits=16, decimal_places=2, null=True) record_xp_in_a_match = fields.DecimalField(max_digits=16, decimal_places=2, null=True) accuracy = fields.DecimalField(max_digits=16, decimal_places=2, null=True) last_updated = fields.DecimalField(max_digits=16, decimal_places=2, null=True) losses = fields.DecimalField(max_digits=16, decimal_places=2, null=True) total_games_played = fields.DecimalField(max_digits=16, decimal_places=2, null=True) score = fields.DecimalField(max_digits=16, decimal_places=2, null=True) win_loss_ratio = fields.DecimalField(max_digits=16, decimal_places=2, null=True) # winLossRatio or wlRatio total_shots = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_score_xp = fields.DecimalField(max_digits=16, decimal_places=2, null=True) games_played = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_sguard_wave = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_sguard_weapon_level = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_squad_kills = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_squad_wave = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_confirmed = fields.DecimalField(max_digits=16, decimal_places=2, null=True) deaths = fields.DecimalField(max_digits=16, decimal_places=2, null=True) wins = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_squard_crates = fields.DecimalField(max_digits=16, decimal_places=2, null=True) kd_ratio = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_assists = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_field_goals = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_score = fields.DecimalField(max_digits=16, decimal_places=2, null=True) record_deaths_in_a_match = fields.DecimalField(max_digits=16, decimal_places=2, null=True) score_per_game = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_spm = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_kill_chains = fields.DecimalField(max_digits=16, decimal_places=2, null=True) record_kills_in_a_match = fields.DecimalField(max_digits=16, decimal_places=2, null=True) suicides = fields.DecimalField(max_digits=16, decimal_places=2, null=True) current_win_streak = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_match_bonus_xp = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_match_xp = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_s_guard_weapon_level = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_kd = fields.DecimalField(max_digits=16, decimal_places=2, null=True) kills = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_kills_as_infected = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_returns = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_stabs = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_kills_as_survivor = fields.DecimalField(max_digits=16, decimal_places=2, null=True) time_played_total = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_destructions = fields.DecimalField(max_digits=16, decimal_places=2, null=True) headshots = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_rescues = fields.DecimalField(max_digits=16, decimal_places=2, null=True) assists = fields.DecimalField(max_digits=16, decimal_places=2, null=True) ties = fields.DecimalField(max_digits=16, decimal_places=2, null=True) record_killstreak = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_plants = fields.DecimalField(max_digits=16, decimal_places=2, null=True) misses = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_damage = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_setbacks = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_touchdowns = fields.DecimalField(max_digits=16, decimal_places=2, null=True) score_per_minute = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_deaths = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_medal_xp = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_defends = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_squad_revives = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_kills = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_defuses = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_captures = fields.DecimalField(max_digits=16, decimal_places=2, null=True) hits = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_kill_streak = fields.DecimalField(max_digits=16, decimal_places=2, null=True) best_denied = fields.DecimalField(max_digits=16, decimal_places=2, null=True) time_played = fields.DecimalField(max_digits=16, decimal_places=2, null=True) time = fields.DecimalField(max_digits=16, decimal_places=2, null=True) infected = fields.DecimalField(max_digits=16, decimal_places=2, null=True) defuses = fields.DecimalField(max_digits=16, decimal_places=2, null=True) plants = fields.DecimalField(max_digits=16, decimal_places=2, null=True) defends = fields.DecimalField(max_digits=16, decimal_places=2, null=True) top_twenty_five = fields.DecimalField(max_digits=16, decimal_places=2, null=True) downs = fields.DecimalField(max_digits=16, decimal_places=2, null=True) top_ten = fields.DecimalField(max_digits=16, decimal_places=2, null=True) contracts = fields.DecimalField(max_digits=16, decimal_places=2, null=True) cash = fields.DecimalField(max_digits=16, decimal_places=2, null=True) revives = fields.DecimalField(max_digits=16, decimal_places=2, null=True) obj_time = fields.DecimalField(max_digits=16, decimal_places=2, null=True) set_backs = fields.DecimalField(max_digits=16, decimal_places=2, null=True) shots = fields.DecimalField(max_digits=16, decimal_places=2, null=True) uses = fields.DecimalField(max_digits=16, decimal_places=2, null=True) awarded_count = fields.DecimalField(max_digits=16, decimal_places=2, null=True) max_level = fields.DecimalField(max_digits=16, decimal_places=2, null=True) def __str__(self) -> str: return f"{self.__class__.__name__} {self.id}"