52 lines
1.2 KiB
Python
52 lines
1.2 KiB
Python
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",
|
|
)
|