Skip to content

Commit 691eff0

Browse files
32 - Edit and Save Database Data
1 parent 8fb79f2 commit 691eff0

File tree

3 files changed

+83
-45
lines changed

3 files changed

+83
-45
lines changed

full_stack_python/blog/edit.py

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,20 @@
11
import reflex as rx
22

33
from ..ui.base import base_page
4-
# from . import forms
54

6-
class EditExampleState(rx.State):
7-
title: str = "Hello World"
8-
content: str = "This is my blog post"
95

10-
def handle_submit(self, form_data):
11-
print(form_data)
6+
from . import forms
127

13-
14-
def blog_post_edit_sample_form() -> rx.Component:
15-
return rx.form(
16-
rx.vstack(
17-
rx.hstack(
18-
rx.input(
19-
value=EditExampleState.title,
20-
on_change=EditExampleState.set_title,
21-
name="title",
22-
placeholder="Title",
23-
required=True,
24-
type='text',
25-
width='100%',
26-
),
27-
width='100%'
28-
),
29-
rx.text_area(
30-
value = EditExampleState.content,
31-
on_change = EditExampleState.set_content,
32-
name='content',
33-
placeholder="Your message",
34-
required=True,
35-
height='50vh',
36-
width='100%',
37-
),
38-
rx.button("Submit", type="submit"),
39-
),
40-
on_submit=EditExampleState.handle_submit,
41-
)
8+
from .state import BlogEditFormState
429

4310

4411

4512

4613
def blog_post_edit_page() -> rx.Component:
47-
my_form = blog_post_edit_sample_form()
14+
my_form = forms.blog_post_edit_form()
15+
post = BlogEditFormState.post
4816
my_child = rx.vstack(
49-
rx.heading("Edit Blog Post", size="9"),
17+
rx.heading("Editing ", post.title, size="9"),
5018
rx.desktop_only(
5119
rx.box(
5220
my_form,

full_stack_python/blog/forms.py

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import reflex as rx
22

33

4-
from . import state
4+
from .state import (
5+
BlogAddPostFormState,
6+
BlogEditFormState
7+
)
8+
59

610
def blog_post_add_form() -> rx.Component:
711
return rx.form(
@@ -25,6 +29,48 @@ def blog_post_add_form() -> rx.Component:
2529
),
2630
rx.button("Submit", type="submit"),
2731
),
28-
on_submit=state.BlogAddPostFormState.handle_submit,
32+
on_submit=BlogAddPostFormState.handle_submit,
2933
reset_on_submit=True,
34+
)
35+
36+
37+
38+
39+
def blog_post_edit_form() -> rx.Component:
40+
post = BlogEditFormState.post
41+
title = post.title
42+
post_content = BlogEditFormState.post_content
43+
return rx.form(
44+
rx.box(
45+
rx.input(
46+
type='hidden',
47+
name='post_id',
48+
value=post.id
49+
),
50+
display='none'
51+
),
52+
rx.vstack(
53+
rx.hstack(
54+
rx.input(
55+
default_value=title,
56+
name="title",
57+
placeholder="Title",
58+
required=True,
59+
type='text',
60+
width='100%',
61+
),
62+
width='100%'
63+
),
64+
rx.text_area(
65+
value = post_content,
66+
on_change = BlogEditFormState.set_post_content,
67+
name='content',
68+
placeholder="Your message",
69+
required=True,
70+
height='50vh',
71+
width='100%',
72+
),
73+
rx.button("Submit", type="submit"),
74+
),
75+
on_submit=BlogEditFormState.handle_submit,
3076
)

full_stack_python/blog/state.py

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
class BlogPostState(rx.State):
99
posts: List['BlogPostModel'] = []
1010
post: Optional['BlogPostModel'] = None
11+
post_content: str = ""
1112

1213
@rx.var
1314
def blog_post_id(self):
@@ -24,6 +25,7 @@ def get_post_detail(self):
2425
)
2526
).one_or_none()
2627
self.post = result
28+
self.post_content = self.post.content
2729
# return
2830

2931

@@ -45,12 +47,22 @@ def add_post(self, form_data:dict):
4547
session.refresh(post) # post.id
4648
# print("added", post)
4749
self.post = post
48-
# def get_post(self):
49-
# with rx.session() as session:
50-
# result = session.exec(
51-
# select(BlogPostModel)
52-
# )
53-
# self.posts = result
50+
51+
def save_post_edits(self, post_id:int, updated_data:dict):
52+
with rx.session() as session:
53+
post = session.exec(
54+
select(BlogPostModel).where(
55+
BlogPostModel.id == post_id
56+
)
57+
).one_or_none()
58+
if post is None:
59+
return
60+
for key, value in updated_data.items():
61+
setattr(post, key, value)
62+
session.add(post)
63+
session.commit()
64+
session.refresh(post)
65+
#
5466

5567

5668
class BlogAddPostFormState(BlogPostState):
@@ -59,4 +71,16 @@ class BlogAddPostFormState(BlogPostState):
5971
def handle_submit(self, form_data):
6072
self.form_data = form_data
6173
self.add_post(form_data)
74+
# redirect
75+
76+
77+
class BlogEditFormState(BlogPostState):
78+
form_data: dict = {}
79+
# post_content: str = ""
80+
81+
def handle_submit(self, form_data):
82+
self.form_data = form_data
83+
post_id = form_data.pop('post_id')
84+
updated_data = {**form_data}
85+
self.save_post_edits(post_id, updated_data)
6286
# redirect

0 commit comments

Comments
 (0)