1
1
from django import models
2
2
from django .core .xheaders import populate_xheaders
3
- from django .core import template_loader , formfields
3
+ from django .core import template_loader , formfields , meta
4
4
from django .views .auth .login import redirect_to_login
5
5
from django .core .extensions import DjangoContext as Context
6
6
from django .core .paginator import ObjectPaginator , InvalidPage
7
7
from django .utils .httpwrappers import HttpResponse , HttpResponseRedirect
8
8
from django .core .exceptions import Http404 , ObjectDoesNotExist , ImproperlyConfigured
9
9
10
- def create_object (request , app_label , module_name , template_name = None ,
11
- template_loader = template_loader , extra_context = {},
10
+ def create_object (request , app_label , module_name , template_name = None ,
11
+ template_loader = template_loader , extra_context = {},
12
12
post_save_redirect = None , login_required = False , follow = None ):
13
13
"""
14
14
Generic object-creation function.
15
-
15
+
16
16
Templates: ``<app_label>/<module_name>_form``
17
17
Context:
18
18
form
19
19
the form wrapper for the object
20
20
"""
21
21
if login_required and request .user .is_anonymous ():
22
22
return redirect_to_login (request .path )
23
-
23
+
24
24
mod = models .get_module (app_label , module_name )
25
25
manipulator = mod .AddManipulator (follow = follow )
26
26
if request .POST :
27
27
# If data was POSTed, we're trying to create a new object
28
28
new_data = request .POST .copy ()
29
-
29
+
30
+ if mod .Klass ._meta .has_field_type (meta .FileField ):
31
+ new_data .update (request .FILES )
32
+
30
33
# Check for errors
31
34
errors = manipulator .get_validation_errors (new_data )
32
35
manipulator .do_html2python (new_data )
33
-
36
+
34
37
if not errors :
35
38
# No errors -- this means we can save the data!
36
39
new_object = manipulator .save (new_data )
37
-
40
+
38
41
if not request .user .is_anonymous ():
39
42
request .user .add_message ("The %s was created sucessfully." % mod .Klass ._meta .verbose_name )
40
-
43
+
41
44
# Redirect to the new object: first by trying post_save_redirect,
42
45
# then by obj.get_absolute_url; fail if neither works.
43
46
if post_save_redirect :
@@ -50,7 +53,7 @@ def create_object(request, app_label, module_name, template_name=None,
50
53
# No POST, so we want a brand new form without any data or errors
51
54
errors = {}
52
55
new_data = manipulator .flatten_data ()
53
-
56
+
54
57
# Create the FormWrapper, template, context, response
55
58
form = formfields .FormWrapper (manipulator , new_data , errors )
56
59
if not template_name :
@@ -62,13 +65,13 @@ def create_object(request, app_label, module_name, template_name=None,
62
65
for key , value in extra_context .items ():
63
66
if callable (value ):
64
67
c [key ] = value ()
65
- else :
68
+ else :
66
69
c [key ] = value
67
70
return HttpResponse (t .render (c ))
68
71
69
- def update_object (request , app_label , module_name , object_id = None , slug = None ,
72
+ def update_object (request , app_label , module_name , object_id = None , slug = None ,
70
73
slug_field = None , template_name = None , template_loader = template_loader ,
71
- extra_lookup_kwargs = {}, extra_context = {}, post_save_redirect = None ,
74
+ extra_lookup_kwargs = {}, extra_context = {}, post_save_redirect = None ,
72
75
login_required = False , follow = None ):
73
76
"""
74
77
Generic object-update function.
@@ -84,7 +87,7 @@ def update_object(request, app_label, module_name, object_id=None, slug=None,
84
87
return redirect_to_login (request .path )
85
88
86
89
mod = models .get_module (app_label , module_name )
87
-
90
+
88
91
# Look up the object to be edited
89
92
lookup_kwargs = {}
90
93
if object_id :
@@ -98,16 +101,16 @@ def update_object(request, app_label, module_name, object_id=None, slug=None,
98
101
object = mod .get_object (** lookup_kwargs )
99
102
except ObjectDoesNotExist :
100
103
raise Http404 ("%s.%s does not exist for %s" % (app_label , module_name , lookup_kwargs ))
101
-
104
+
102
105
manipulator = mod .ChangeManipulator (object .id , follow = follow )
103
-
106
+
104
107
if request .POST :
105
108
new_data = request .POST .copy ()
106
109
errors = manipulator .get_validation_errors (new_data )
107
110
manipulator .do_html2python (new_data )
108
111
if not errors :
109
112
manipulator .save (new_data )
110
-
113
+
111
114
if not request .user .is_anonymous ():
112
115
request .user .add_message ("The %s was updated sucessfully." % mod .Klass ._meta .verbose_name )
113
116
@@ -122,7 +125,7 @@ def update_object(request, app_label, module_name, object_id=None, slug=None,
122
125
errors = {}
123
126
# This makes sure the form acurate represents the fields of the place.
124
127
new_data = manipulator .flatten_data ()
125
-
128
+
126
129
form = formfields .FormWrapper (manipulator , new_data , errors )
127
130
if not template_name :
128
131
template_name = "%s/%s_form" % (app_label , module_name )
@@ -134,20 +137,20 @@ def update_object(request, app_label, module_name, object_id=None, slug=None,
134
137
for key , value in extra_context .items ():
135
138
if callable (value ):
136
139
c [key ] = value ()
137
- else :
140
+ else :
138
141
c [key ] = value
139
142
response = HttpResponse (t .render (c ))
140
143
populate_xheaders (request , response , app_label , module_name , getattr (object , object ._meta .pk .name ))
141
144
return response
142
145
143
- def delete_object (request , app_label , module_name , post_delete_redirect ,
144
- object_id = None , slug = None , slug_field = None , template_name = None ,
145
- template_loader = template_loader , extra_lookup_kwargs = {},
146
+ def delete_object (request , app_label , module_name , post_delete_redirect ,
147
+ object_id = None , slug = None , slug_field = None , template_name = None ,
148
+ template_loader = template_loader , extra_lookup_kwargs = {},
146
149
extra_context = {}, login_required = False ):
147
150
"""
148
151
Generic object-delete function.
149
-
150
- The given template will be used to confirm deletetion if this view is
152
+
153
+ The given template will be used to confirm deletetion if this view is
151
154
fetched using GET; for safty, deletion will only be performed if this
152
155
view is POSTed.
153
156
@@ -160,7 +163,7 @@ def delete_object(request, app_label, module_name, post_delete_redirect,
160
163
return redirect_to_login (request .path )
161
164
162
165
mod = models .get_module (app_label , module_name )
163
-
166
+
164
167
# Look up the object to be edited
165
168
lookup_kwargs = {}
166
169
if object_id :
@@ -174,7 +177,7 @@ def delete_object(request, app_label, module_name, post_delete_redirect,
174
177
object = mod .get_object (** lookup_kwargs )
175
178
except ObjectDoesNotExist :
176
179
raise Http404 ("%s.%s does not exist for %s" % (app_label , module_name , lookup_kwargs ))
177
-
180
+
178
181
if request .META ['REQUEST_METHOD' ] == 'POST' :
179
182
object .delete ()
180
183
if not request .user .is_anonymous ():
@@ -190,7 +193,7 @@ def delete_object(request, app_label, module_name, post_delete_redirect,
190
193
for key , value in extra_context .items ():
191
194
if callable (value ):
192
195
c [key ] = value ()
193
- else :
196
+ else :
194
197
c [key ] = value
195
198
response = HttpResponse (t .render (c ))
196
199
populate_xheaders (request , response , app_label , module_name , getattr (object , object ._meta .pk .name ))
0 commit comments