-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
76 lines (53 loc) · 2.1 KB
/
models.py
File metadata and controls
76 lines (53 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from datetime import datetime
from oxyde import Model, Field
class User(Model):
"""Blog user."""
id: int | None = Field(default=None, db_pk=True)
username: str = Field(db_unique=True, db_index=True)
email: str = Field(db_unique=True)
created_at: datetime | None = Field(default=None, db_default="CURRENT_TIMESTAMP")
class Meta:
is_table = True
table_name = "users"
class Tag(Model):
"""Tag for posts."""
id: int | None = Field(default=None, db_pk=True)
name: str = Field(db_unique=True)
slug: str = Field(db_unique=True, db_index=True)
class Meta:
is_table = True
table_name = "tags"
class Post(Model):
"""Blog post."""
id: int | None = Field(default=None, db_pk=True)
title: str
content: str
published: bool = Field(default=False)
created_at: datetime | None = Field(default=None, db_default="CURRENT_TIMESTAMP")
updated_at: datetime | None = Field(default=None, db_default="CURRENT_TIMESTAMP")
author: User | None = Field(default=None, db_on_delete="CASCADE")
comments: list["Comment"] = Field(default=[], db_reverse_fk="post")
# Many-to-Many relationship with tags
tags: list[Tag] = Field(default=[], db_m2m=True, db_through="PostTag")
class Meta:
is_table = True
table_name = "posts"
class Comment(Model):
"""Comment on a post."""
id: int | None = Field(default=None, db_pk=True)
content: str
created_at: datetime | None = Field(default=None, db_default="CURRENT_TIMESTAMP")
post: Post | None = Field(default=None, db_on_delete="CASCADE")
author: User | None = Field(default=None, db_on_delete="CASCADE")
class Meta:
is_table = True
table_name = "comments"
class PostTag(Model):
"""Many-to-many relationship between Post and Tag."""
id: int | None = Field(default=None, db_pk=True)
post: Post | None = Field(default=None, db_on_delete="CASCADE")
tag: Tag | None = Field(default=None, db_on_delete="CASCADE")
class Meta:
is_table = True
table_name = "post_tags"
unique_together = [("post", "tag")]