[models] extract common fields into mixin

This commit is contained in:
bronsen 2025-12-09 00:53:17 +01:00
parent 4e776f5a51
commit 59e68f47bd

View file

@ -1,18 +1,19 @@
from typing import final from datetime import datetime
from tortoise import Model, fields from tortoise import Model, fields
@final class TimestampMixin:
class Teilchen(Model): created_at: fields.Field[datetime] = fields.DatetimeField(auto_now_add=True)
name = fields.TextField() modified_at: fields.Field[datetime] = fields.DatetimeField(auto_now=True)
description = fields.TextField()
number = fields.IntField() # validate values >= 0
created_at = fields.DatetimeField(auto_now_add=True)
modified_at = fields.DatetimeField(auto_now=True)
tags = fields.ManyToManyField( 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", "models.Tag",
through="models.TeilchenTag", through="models.TeilchenTag",
related_name="teilchen", related_name="teilchen",
@ -21,18 +22,13 @@ class Teilchen(Model):
) )
@final class Tag(TimestampMixin, Model):
class Tag(Model): name: fields.Field[str] = fields.CharField(max_length=20)
name = fields.CharField(max_length=20)
created_at = fields.DatetimeField(auto_now_add=True)
modified_at = fields.DatetimeField(auto_now=True)
@final
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.IntField() weight: fields.Field[int] = fields.IntField() # range? percentage?