from datetime import datetime from tortoise import Model, fields class TimestampMixin: created_at: fields.Field[datetime] = fields.DatetimeField(auto_now_add=True) modified_at: fields.Field[datetime] = fields.DatetimeField(auto_now=True) class Teilchen(TimestampMixin, Model): name: fields.Field[str] = fields.TextField() description: fields.Field[str] = fields.TextField() number: fields.Field[int] = fields.IntField() # TODO: validate values >= 0 tags: fields.ManyToManyRelation["Tag"] = fields.ManyToManyField( "models.Tag", through="models.TeilchenTag", related_name="teilchen", forward_key="tag_id", backward_key="teilchen_id", ) class Tag(TimestampMixin, Model): name: fields.Field[str] = fields.CharField(max_length=20) class TeilchenTag(Model): teilchen: fields.ForeignKeyRelation[Teilchen] = fields.ForeignKeyField( "models.Teilchen" ) tag: fields.ForeignKeyRelation[Tag] = fields.ForeignKeyField("models.Tag") weight: fields.Field[int] = fields.IntField() # range? percentage?