Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9f23981

Browse files
🔨 Refactor NewsLink fetch into separate class
1 parent 8e07943 commit 9f23981

File tree

1 file changed

+26
-39
lines changed

1 file changed

+26
-39
lines changed

‎src/organizer/views.py‎

Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,29 @@
1818
from .models import NewsLink, Startup, Tag
1919

2020

21+
class NewsLinkObjectMixin:
22+
"""Django View mix-in to find NewsLinks"""
23+
24+
def get_object(self):
25+
"""Get NewsLink from database"""
26+
# Django's View class puts URI kwargs in dictionary
27+
startup_slug = self.kwargs.get("startup_slug")
28+
newslink_slug = self.kwargs.get("newslink_slug")
29+
30+
if startup_slug is None or newslink_slug is None:
31+
raise AttributeError(
32+
f"View {self.__class__.__name__} must be"
33+
f"called with a slug for a Startup and a"
34+
f"slug for a NewsLink objects."
35+
)
36+
37+
return get_object_or_404(
38+
NewsLink,
39+
startup__slug=startup_slug,
40+
slug=newslink_slug,
41+
)
42+
43+
2144
class NewsLinkCreate(View):
2245
"""Create a link to an article about a startup"""
2346

@@ -52,23 +75,11 @@ def post(self, request, startup_slug):
5275
return render(request, self.template_name, context)
5376

5477

55-
class NewsLinkDelete(View):
78+
class NewsLinkDelete(NewsLinkObjectMixin, View):
5679
"""Delete a link to an article about a startup"""
5780

5881
template_name = "newslink/confirm_delete.html"
5982

60-
def get_object(self):
61-
"""Get NewsLink from database"""
62-
# Django's View class puts URI kwargs in dictionary
63-
startup_slug = self.kwargs.get("startup_slug")
64-
newslink_slug = self.kwargs.get("newslink_slug")
65-
66-
return get_object_or_404(
67-
NewsLink,
68-
startup__slug=startup_slug,
69-
slug=newslink_slug,
70-
)
71-
7283
def get(self, request, startup_slug, newslink_slug):
7384
"""Ask for confirmation of deletion"""
7485
newslink = self.get_object()
@@ -88,21 +99,9 @@ def post(self, request, startup_slug, newslink_slug):
8899
return redirect(startup)
89100

90101

91-
class NewsLinkDetail(View):
102+
class NewsLinkDetail(NewsLinkObjectMixin, View):
92103
"""Redirect /<startup>/<newslink>/ to /<startup>/"""
93104

94-
def get_object(self):
95-
"""Get NewsLink from database"""
96-
# Django's View class puts URI kwargs in dictionary
97-
startup_slug = self.kwargs.get("startup_slug")
98-
newslink_slug = self.kwargs.get("newslink_slug")
99-
100-
return get_object_or_404(
101-
NewsLink,
102-
startup__slug=startup_slug,
103-
slug=newslink_slug,
104-
)
105-
106105
def get(self, request, startup_slug, newslink_slug):
107106
"""Redirect user to Startup page"""
108107
# We could redirect like so:
@@ -131,23 +130,11 @@ def get(self, request, startup_slug, newslink_slug):
131130
return redirect(newslink.startup)
132131

133132

134-
class NewsLinkUpdate(View):
133+
class NewsLinkUpdate(NewsLinkObjectMixin, View):
135134
"""Update a link to an article about a startup"""
136135

137136
template_name = "newslink/form.html"
138137

139-
def get_object(self):
140-
"""Get NewsLink from database"""
141-
# Django's View class puts URI kwargs in dictionary
142-
startup_slug = self.kwargs.get("startup_slug")
143-
newslink_slug = self.kwargs.get("newslink_slug")
144-
145-
return get_object_or_404(
146-
NewsLink,
147-
startup__slug=startup_slug,
148-
slug=newslink_slug,
149-
)
150-
151138
def get(self, request, startup_slug, newslink_slug):
152139
"""Display pre-filled form to update NewsLink"""
153140
newslink = self.get_object()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /