1818from .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+ 2144class 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