How-To: Timestamps¶
Add automatic timestamp tracking to your models.
Basic Pattern¶
from datetime import datetime
from ferro import Model, Field
class TimestampedModel(Model):
created_at: datetime = Field(default_factory=datetime.now)
updated_at: datetime = Field(default_factory=datetime.now)
class User(TimestampedModel):
username: str
email: str
# Usage
user = await User.create(username="alice", email="alice@example.com")
print(f"Created at: {user.created_at}")
Auto-Updating updated_at¶
class TimestampedModel(Model):
created_at: datetime = Field(default_factory=datetime.now)
updated_at: datetime = Field(default_factory=datetime.now)
async def save(self):
"""Override save to update timestamp."""
self.updated_at = datetime.now()
await super().save()
# Usage
user = await User.where(User.id == 1).first()
user.username = "new_name"
await user.save() # updated_at automatically set
Timezone-Aware Timestamps¶
from datetime import datetime, timezone
def utc_now():
return datetime.now(timezone.utc)
class Model(Model):
created_at: datetime = Field(default_factory=utc_now)
updated_at: datetime = Field(default_factory=utc_now)