|
| 1 | +from sqlalchemy.orm import Mapped, mapped_column, relationship |
| 2 | +from sqlalchemy import ForeignKey |
1 | 3 | from datetime import datetime
|
2 | 4 | from datetime import timezone
|
3 | 5 |
|
|
7 | 9 | from flaskr.auth.models import User
|
8 | 10 |
|
9 | 11 |
|
10 |
| -def now_utc(): |
| 12 | +def now_utc() -> datetime: |
11 | 13 | return datetime.now(timezone.utc)
|
12 | 14 |
|
13 | 15 |
|
14 | 16 | class Post(db.Model):
|
15 |
| - id = db.Column(db.Integer, primary_key=True) |
16 |
| - author_id = db.Column(db.ForeignKey(User.id), nullable=False) |
17 |
| - created = db.Column(db.DateTime, nullable=False, default=now_utc) |
18 |
| - title = db.Column(db.String, nullable=False) |
19 |
| - body = db.Column(db.String, nullable=False) |
| 17 | + id: Mapped[int] = mapped_column(primary_key=True) |
| 18 | + author_id: Mapped[int] = mapped_column(ForeignKey("user.id")) |
| 19 | + created: Mapped[datetime] = mapped_column(default=now_utc) |
| 20 | + title: Mapped[str] |
| 21 | + body: Mapped[str] |
20 | 22 |
|
21 | 23 | # User object backed by author_id
|
22 | 24 | # lazy="joined" means the user is returned with the post in one query
|
23 |
| - author = db.relationship(User, lazy="joined", back_populates="posts") |
| 25 | + author: Mapped[User] = relationship(lazy="joined", back_populates="posts") |
24 | 26 |
|
25 | 27 | @property
|
26 |
| - def update_url(self): |
| 28 | + def update_url(self) -> str: |
27 | 29 | return url_for("blog.update", id=self.id)
|
28 | 30 |
|
29 | 31 | @property
|
30 |
| - def delete_url(self): |
| 32 | + def delete_url(self) -> str: |
31 | 33 | return url_for("blog.delete", id=self.id)
|
0 commit comments