Changeset 7603
- Timestamp:
- 06/09/08 22:54:05 (6 months ago)
- Files:
-
- django/branches/newforms-admin/django/contrib/admin/options.py (modified) (2 diffs)
- django/branches/newforms-admin/django/contrib/admin/templatetags/admin_modify.py (modified) (1 diff)
- django/branches/newforms-admin/django/newforms/formsets.py (modified) (1 diff)
- django/branches/newforms-admin/django/newforms/models.py (modified) (2 diffs)
- django/branches/newforms-admin/tests/modeltests/model_formsets/models.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/newforms-admin/django/contrib/admin/options.py
r7588 r7603 448 448 'opts': opts, 449 449 'content_type_id': ContentType.objects.get_for_model(model).id, 450 'save_as': self.save_as, 450 451 'save_on_top': self.save_on_top, 451 452 } … … 478 479 form = ModelForm(request.POST, request.FILES) 479 480 for FormSet in self.get_formsets(request): 480 inline_formset = FormSet(data=request.POST, files=request.FILES, instance=obj) 481 inline_formset = FormSet(data=request.POST, files=request.FILES, 482 instance=obj, save_as_new=request.POST.has_key("_saveasnew")) 481 483 inline_formsets.append(inline_formset) 482 484 if all_valid(inline_formsets) and form.is_valid(): django/branches/newforms-admin/django/contrib/admin/templatetags/admin_modify.py
r6797 r7603 21 21 change = context['change'] 22 22 is_popup = context['is_popup'] 23 # TODO: Fix this hack. 24 # save_as = opts.admin.save_as 25 save_as = False 23 save_as = context['save_as'] 26 24 return { 27 25 'onclick_attrib': (opts.get_ordered_objects() and change django/branches/newforms-admin/django/newforms/formsets.py
r7587 r7603 58 58 self.management_form = ManagementForm(initial=initial, auto_id=self.auto_id, prefix=self.prefix) 59 59 60 # construct the forms in the formset 61 self._construct_forms() 62 63 def __unicode__(self): 64 return self.as_table() 65 66 def _construct_forms(self): 60 67 # instantiate all the forms and put them in self.forms 61 68 self.forms = [] 62 for i in range(self._total_form_count):69 for i in xrange(self._total_form_count): 63 70 self.forms.append(self._construct_form(i)) 64 65 def __unicode__(self): 66 return self.as_table() 67 71 68 72 def _construct_form(self, i): 69 73 """ django/branches/newforms-admin/django/newforms/models.py
r7508 r7603 303 303 model = None 304 304 305 def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, queryset=None): 305 def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, 306 queryset=None, **kwargs): 306 307 self.queryset = queryset 307 kwargs = {'data': data, 'files': files, 'auto_id': auto_id, 'prefix': prefix} 308 kwargs['initial'] = [model_to_dict(obj) for obj in self.get_queryset()] 309 super(BaseModelFormSet, self).__init__(**kwargs) 308 defaults = {'data': data, 'files': files, 'auto_id': auto_id, 'prefix': prefix} 309 defaults['initial'] = [model_to_dict(obj) for obj in self.get_queryset()] 310 defaults.update(kwargs) 311 super(BaseModelFormSet, self).__init__(**defaults) 310 312 311 313 def get_queryset(self): … … 387 389 class BaseInlineFormset(BaseModelFormSet): 388 390 """A formset for child objects related to a parent.""" 389 def __init__(self, data=None, files=None, instance=None ):391 def __init__(self, data=None, files=None, instance=None, save_as_new=False): 390 392 from django.db.models.fields.related import RelatedObject 391 393 self.instance = instance 394 self.save_as_new = save_as_new 392 395 # is there a better way to get the object descriptor? 393 396 self.rel_name = RelatedObject(self.fk.rel.to, self.model, self.fk).get_accessor_name() 394 397 super(BaseInlineFormset, self).__init__(data, files, prefix=self.rel_name) 398 399 def _construct_forms(self): 400 from django.newforms.formsets import INITIAL_FORM_COUNT 401 if self.save_as_new: 402 self._total_form_count = self.management_form.cleaned_data[INITIAL_FORM_COUNT] 403 self._initial_form_count = 0 404 super(BaseInlineFormset, self)._construct_forms() 395 405 396 406 def get_queryset(self): django/branches/newforms-admin/tests/modeltests/model_formsets/models.py
r7507 r7603 233 233 Les Fleurs du Mal 234 234 235 The save_as_new parameter lets you re-associate the data to a new instance. 236 This is used in the admin for save_as functionality. 237 238 >>> data = { 239 ... 'book_set-TOTAL_FORMS': '3', # the number of forms rendered 240 ... 'book_set-INITIAL_FORMS': '2', # the number of forms with initial data 241 ... 'book_set-0-id': '1', 242 ... 'book_set-0-title': 'Les Fleurs du Mal', 243 ... 'book_set-1-id': '2', 244 ... 'book_set-1-title': 'Le Spleen de Paris', 245 ... 'book_set-2-title': '', 246 ... } 247 248 >>> formset = AuthorBooksFormSet(data, instance=Author(), save_as_new=True) 249 >>> formset.is_valid() 250 True 251 252 >>> new_author = Author.objects.create(name='Charles Baudelaire') 253 >>> formset.instance = new_author 254 >>> [book for book in formset.save() if book.author.pk == new_author.pk] 255 [<Book: Les Fleurs du Mal>, <Book: Le Spleen de Paris>] 256 235 257 """}
