from datetime import datetime from tortoise import Model, fields from tortoise.validators import MinValueValidator 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( null=False, ) 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( "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( null=False, max_length=20, ) class TeilchenTag(Model): teilchen: fields.ForeignKeyRelation[Teilchen] = fields.ForeignKeyField( "models.Teilchen", ) tag: fields.ForeignKeyRelation[Tag] = fields.ForeignKeyField( "models.Tag", )