Index: django/core/meta/__init__.py
===================================================================
--- django/core/meta/__init__.py	(revision 961)
+++ django/core/meta/__init__.py	(working copy)
@@ -1018,7 +1018,7 @@
     return os.path.getsize(method_get_file_filename(field, self))
 
 def method_save_file(field, self, filename, raw_contents):
-    directory = field.get_directory_name()
+    directory = os.path.join(field.get_directory_name(), os.path.dirname(filename))
     try: # Create the date-based directory if it doesn't exist.
         os.makedirs(os.path.join(settings.MEDIA_ROOT, directory))
     except OSError: # Directory probably already exists.
Index: django/core/meta/fields.py
===================================================================
--- django/core/meta/fields.py	(revision 961)
+++ django/core/meta/fields.py	(working copy)
@@ -422,9 +422,9 @@
     def get_directory_name(self):
         return os.path.normpath(datetime.datetime.now().strftime(self.upload_to))
 
-    def get_filename(self, filename):
-        from django.utils.text import get_valid_filename
-        f = os.path.join(self.get_directory_name(), get_valid_filename(os.path.basename(filename)))
+    def get_filename(self, filename):
+        from django.utils.text import get_valid_filename
+        f = os.path.join(self.get_directory_name(), os.path.dirname(filename), get_valid_filename(os.path.basename(filename)))
         return os.path.normpath(f)
 
 class FilePathField(Field):
