Changeset 4609
- Timestamp:
- 02/26/07 11:17:11 (2 years ago)
- Files:
-
- django/trunk/django/db/models/base.py (modified) (2 diffs)
- django/trunk/django/db/models/fields/__init__.py (modified) (3 diffs)
- django/trunk/django/db/models/manipulators.py (modified) (1 diff)
- django/trunk/tests/regressiontests/bug639 (added)
- django/trunk/tests/regressiontests/bug639/__init__.py (added)
- django/trunk/tests/regressiontests/bug639/models.py (added)
- django/trunk/tests/regressiontests/bug639/test.jpg (added)
- django/trunk/tests/regressiontests/bug639/tests.py (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/db/models/base.py
r4607 r4609 357 357 return os.path.getsize(self._get_FIELD_filename(field)) 358 358 359 def _save_FIELD_file(self, field, filename, raw_contents ):359 def _save_FIELD_file(self, field, filename, raw_contents, save=True): 360 360 directory = field.get_directory_name() 361 361 try: # Create the date-based directory if it doesn't exist. … … 392 392 setattr(self, field.height_field, height) 393 393 394 # Save the object, because it has changed. 395 self.save() 394 # Save the object because it has changed unless save is False 395 if save: 396 self.save() 396 397 397 398 _save_FIELD_file.alters_data = True django/trunk/django/db/models/fields/__init__.py
r4592 r4609 636 636 setattr(cls, 'get_%s_url' % self.name, curry(cls._get_FIELD_url, field=self)) 637 637 setattr(cls, 'get_%s_size' % self.name, curry(cls._get_FIELD_size, field=self)) 638 setattr(cls, 'save_%s_file' % self.name, lambda instance, filename, raw_contents : instance._save_FIELD_file(self, filename, raw_contents))638 setattr(cls, 'save_%s_file' % self.name, lambda instance, filename, raw_contents, save=True: instance._save_FIELD_file(self, filename, raw_contents, save)) 639 639 dispatcher.connect(self.delete_file, signal=signals.post_delete, sender=cls) 640 640 … … 654 654 return [name_prefix + self.name + '_file', name_prefix + self.name] 655 655 656 def save_file(self, new_data, new_object, original_object, change, rel ):656 def save_file(self, new_data, new_object, original_object, change, rel, save=True): 657 657 upload_field_name = self.get_manipulator_field_names('')[0] 658 658 if new_data.get(upload_field_name, False): 659 659 func = getattr(new_object, 'save_%s_file' % self.name) 660 660 if rel: 661 func(new_data[upload_field_name][0]["filename"], new_data[upload_field_name][0]["content"] )661 func(new_data[upload_field_name][0]["filename"], new_data[upload_field_name][0]["content"], save) 662 662 else: 663 func(new_data[upload_field_name]["filename"], new_data[upload_field_name]["content"] )663 func(new_data[upload_field_name]["filename"], new_data[upload_field_name]["content"], save) 664 664 665 665 def get_directory_name(self): … … 705 705 setattr(cls, 'get_%s_height' % self.name, curry(cls._get_FIELD_height, field=self)) 706 706 707 def save_file(self, new_data, new_object, original_object, change, rel ):708 FileField.save_file(self, new_data, new_object, original_object, change, rel )707 def save_file(self, new_data, new_object, original_object, change, rel, save=True): 708 FileField.save_file(self, new_data, new_object, original_object, change, rel, save) 709 709 # If the image has height and/or width field(s) and they haven't 710 710 # changed, set the width and/or height field(s) back to their original 711 711 # values. 712 if change and (self.width_field or self.height_field) :712 if change and (self.width_field or self.height_field) and save: 713 713 if self.width_field: 714 714 setattr(new_object, self.width_field, getattr(original_object, self.width_field)) django/trunk/django/db/models/manipulators.py
r4486 r4609 97 97 params[self.opts.pk.attname] = self.obj_key 98 98 99 # First, save the basic object itself.99 # First, create the basic object itself. 100 100 new_object = self.model(**params) 101 new_object.save() 102 103 # Now that the object's been saved, save any uploaded files. 101 102 # Now that the object's been created, save any uploaded files. 104 103 for f in self.opts.fields: 105 104 if isinstance(f, FileField): 106 f.save_file(new_data, new_object, self.change and self.original_object or None, self.change, rel=False) 105 f.save_file(new_data, new_object, self.change and self.original_object or None, self.change, rel=False, save=False) 106 107 # Now save the object 108 new_object.save() 107 109 108 110 # Calculate which primary fields have changed.
