Skip to content

Commit bd0507a

Browse files
committed
Use cached property .object and .objects for object views
1 parent 6bb1567 commit bd0507a

File tree

2 files changed

+14
-42
lines changed

2 files changed

+14
-42
lines changed

plain-worker/plain/worker/admin.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,5 @@ class DetailView(AdminModelDetailView):
229229
title = "Job result"
230230

231231
def post(self):
232-
self.load_object()
233232
self.object.retry_job(delay=0)
234233
return ResponseRedirect(".")

plain/plain/views/objects.py

Lines changed: 14 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
from functools import cached_property
2+
13
from plain.exceptions import ImproperlyConfigured, ObjectDoesNotExist
24
from plain.forms import Form
3-
from plain.http import Http404, Response
5+
from plain.http import Http404
46

57
from .forms import FormView
68
from .templates import TemplateView
@@ -9,20 +11,19 @@
911
class ObjectTemplateViewMixin:
1012
context_object_name = ""
1113

12-
def get(self) -> Response:
13-
self.load_object()
14-
return self.render_template()
15-
16-
def load_object(self) -> None:
14+
@cached_property
15+
def object(self):
1716
try:
18-
self.object = self.get_object()
17+
obj = self.get_object()
1918
except ObjectDoesNotExist:
2019
raise Http404
2120

22-
if not self.object:
21+
if not obj:
2322
# Also raise 404 if the object is None
2423
raise Http404
2524

25+
return obj
26+
2627
def get_object(self): # Intentionally untyped... subclasses must override this.
2728
raise NotImplementedError(
2829
f"get_object() is not implemented on {self.__class__.__name__}"
@@ -50,23 +51,11 @@ class DetailView(ObjectTemplateViewMixin, TemplateView):
5051
pass
5152

5253

53-
class CreateView(ObjectTemplateViewMixin, FormView):
54+
class CreateView(FormView):
5455
"""
5556
View for creating a new object, with a response rendered by a template.
5657
"""
5758

58-
def post(self) -> Response:
59-
"""
60-
Handle POST requests: instantiate a form instance with the passed
61-
POST variables and then check if it's valid.
62-
"""
63-
# Context expects self.object to exist
64-
self.load_object()
65-
return super().post()
66-
67-
def load_object(self) -> None:
68-
self.object = None
69-
7059
# TODO? would rather you have to specify this...
7160
def get_success_url(self, form):
7261
"""Return the URL to redirect to after processing a valid form."""
@@ -91,14 +80,6 @@ def form_valid(self, form):
9180
class UpdateView(ObjectTemplateViewMixin, FormView):
9281
"""View for updating an object, with a response rendered by a template."""
9382

94-
def post(self) -> Response:
95-
"""
96-
Handle POST requests: instantiate a form instance with the passed
97-
POST variables and then check if it's valid.
98-
"""
99-
self.load_object()
100-
return super().post()
101-
10283
def get_success_url(self, form):
10384
"""Return the URL to redirect to after processing a valid form."""
10485
if self.success_url:
@@ -115,7 +96,7 @@ def get_success_url(self, form):
11596

11697
def form_valid(self, form):
11798
"""If the form is valid, save the associated model."""
118-
self.object = form.save()
99+
form.save()
119100
return super().form_valid(form)
120101

121102
def get_form_kwargs(self):
@@ -141,14 +122,6 @@ def save(self):
141122

142123
form_class = EmptyDeleteForm
143124

144-
def post(self) -> Response:
145-
"""
146-
Handle POST requests: instantiate a form instance with the passed
147-
POST variables and then check if it's valid.
148-
"""
149-
self.load_object()
150-
return super().post()
151-
152125
def get_form_kwargs(self):
153126
"""Return the keyword arguments for instantiating the form."""
154127
kwargs = super().get_form_kwargs()
@@ -169,9 +142,9 @@ class ListView(TemplateView):
169142

170143
context_object_name = ""
171144

172-
def get(self) -> Response:
173-
self.objects = self.get_objects()
174-
return super().get()
145+
@cached_property
146+
def objects(self):
147+
return self.get_objects()
175148

176149
def get_objects(self):
177150
raise NotImplementedError(

0 commit comments

Comments
 (0)