[models] add constraints

This commit is contained in:
bronsen 2025-12-09 21:21:36 +01:00
parent 59e68f47bd
commit be0d7acf3b

View file

@ -1,17 +1,31 @@
from datetime import datetime from datetime import datetime
from tortoise import Model, fields from tortoise import Model, fields
from tortoise.validators import MinValueValidator
class TimestampMixin: class TimestampMixin:
created_at: fields.Field[datetime] = fields.DatetimeField(auto_now_add=True) created_at: fields.Field[datetime] = fields.DatetimeField(
modified_at: fields.Field[datetime] = fields.DatetimeField(auto_now=True) auto_now_add=True,
)
modified_at: fields.Field[datetime] = fields.DatetimeField(
auto_now=True,
)
class Teilchen(TimestampMixin, Model): class Teilchen(TimestampMixin, Model):
name: fields.Field[str] = fields.TextField() name: fields.Field[str] = fields.TextField(
description: fields.Field[str] = fields.TextField() null=False,
number: fields.Field[int] = fields.IntField() # TODO: validate values >= 0 )
description: fields.Field[str] = fields.TextField(
null=False,
)
number: fields.Field[int] = fields.IntField(
null=False,
validators=[
MinValueValidator(0),
],
)
tags: fields.ManyToManyRelation["Tag"] = fields.ManyToManyField( tags: fields.ManyToManyRelation["Tag"] = fields.ManyToManyField(
"models.Tag", "models.Tag",
@ -23,12 +37,16 @@ class Teilchen(TimestampMixin, Model):
class Tag(TimestampMixin, Model): class Tag(TimestampMixin, Model):
name: fields.Field[str] = fields.CharField(max_length=20) name: fields.Field[str] = fields.CharField(
null=False,
max_length=20,
)
class TeilchenTag(Model): class TeilchenTag(Model):
teilchen: fields.ForeignKeyRelation[Teilchen] = fields.ForeignKeyField( teilchen: fields.ForeignKeyRelation[Teilchen] = fields.ForeignKeyField(
"models.Teilchen" "models.Teilchen",
)
tag: fields.ForeignKeyRelation[Tag] = fields.ForeignKeyField(
"models.Tag",
) )
tag: fields.ForeignKeyRelation[Tag] = fields.ForeignKeyField("models.Tag")
weight: fields.Field[int] = fields.IntField() # range? percentage?