5 | | {{{ |
6 | | Index: django/contrib/admin/options.py |
7 | | =================================================================== |
8 | | --- django/contrib/admin/options.py (revision 8129) |
9 | | +++ django/contrib/admin/options.py (working copy) |
10 | | @@ -324,7 +324,19 @@ |
11 | | def get_formsets(self, request, obj=None): |
12 | | for inline in self.inline_instances: |
13 | | yield inline.get_formset(request, obj) |
14 | | + |
15 | | + def save_model_add(self, request, form, formsets): |
16 | | + new_object = form.save(commit=True) |
17 | | + |
18 | | + if formsets: |
19 | | + for formset in formsets: |
20 | | + # HACK: it seems like the parent obejct should be passed into |
21 | | + # a method of something, not just set as an attribute |
22 | | + formset.instance = new_object |
23 | | + formset.save() |
24 | | + |
25 | | + return new_object |
26 | | + |
27 | | def save_add(self, request, form, formsets, post_url_continue): |
28 | | """ |
29 | | Saves the object in the "add" stage and returns an HttpResponseRedirect. |
30 | | @@ -333,15 +345,9 @@ |
31 | | """ |
32 | | from django.contrib.admin.models import LogEntry, ADDITION |
33 | | opts = self.model._meta |
34 | | - new_object = form.save(commit=True) |
35 | | - |
36 | | - if formsets: |
37 | | - for formset in formsets: |
38 | | - # HACK: it seems like the parent obejct should be passed into |
39 | | - # a method of something, not just set as an attribute |
40 | | - formset.instance = new_object |
41 | | - formset.save() |
42 | | - |
43 | | + |
44 | | + new_object = self.save_model_add(request, form, formsets) |
45 | | + |
46 | | pk_value = new_object._get_pk_val() |
47 | | LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(self.model).id, |
48 | | pk_value, force_unicode(new_object), ADDITION) |
49 | | msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': opts.verbose_name, 'obj': new_object} |
50 | | @@ -371,7 +377,16 @@ |
51 | | post_url = '../../../' |
52 | | return HttpResponseRedirect(post_url) |
53 | | save_add = transaction.commit_on_success(save_add) |
54 | | - |
55 | | + |
56 | | + def save_model_change(self, request, form, formsets): |
57 | | + new_object = form.save(commit=True) |
58 | | + |
59 | | + if formsets: |
60 | | + for formset in formsets: |
61 | | + formset.save() |
62 | | + |
63 | | + return new_object |
64 | | + |
65 | | def save_change(self, request, form, formsets=None): |
66 | | """ |
67 | | Saves the object in the "change" stage and returns an HttpResponseRedirect. |
68 | | @@ -382,13 +397,11 @@ |
69 | | """ |
70 | | from django.contrib.admin.models import LogEntry, CHANGE |
71 | | opts = self.model._meta |
72 | | - new_object = form.save(commit=True) |
73 | | + |
74 | | + new_object = self.save_model_change(request, form, formsets) |
75 | | + |
76 | | pk_value = new_object._get_pk_val() |
77 | | - |
78 | | - if formsets: |
79 | | - for formset in formsets: |
80 | | - formset.save() |
81 | | - |
82 | | + |
83 | | # Construct the change message. |
84 | | change_message = [] |
85 | | if form.changed_data: |
86 | | }}} |
87 | | The above would allow ModelAdmin subclasses to make additional changes to the model by calling form.save(commit=False) instead. For the admin user described above, the subclass would look like this: |
| 5 | This would allow ModelAdmin subclasses to make additional changes to the model by calling form.save(commit=False) instead. For the admin user described above, the subclass would look like this: |