Question

I've problem with upload method on the admin/ urls:

In my settings:

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/"
MEDIA_ROOT = os.path.join(PROJECT_PATH, "media")

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = '/media/'

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    os.path.join(PROJECT_PATH, "static"),
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

And on my lms/models.py

MEDIA_TYPES = (
    ('Videos', 'Videos'),
    ('Photos', 'Photos'),
    ('PDF', 'PDF'),
)


class LessonFile(models.Model):
    """
    The files for every lessons
    """
    lesson = models.ForeignKey(Lesson)
    documents = models.FileField(upload_to='/media/uploads/lms/lessons/')
    title = models.CharField(max_length=255)
    media_type = models.CharField(max_length=255, choices=MEDIA_TYPES)

    def __unicode__(self):
        return self.lesson

on my admin/, when i try to save a document (by upload method):

Attempted access to '/media/uploads/lms/lessons/xxxx.pdf' denied.

Was it helpful?

Solution

https://docs.djangoproject.com/en/1.5/ref/models/fields/#django.db.models.FileField.upload_to

FileField.upload_to A local filesystem path _that will be appended to your MEDIA_ROOT setting_

IOW, upload_to is supposed to be a relative path. Try this instead:

documents = models.FileField(upload_to='uploads/lms/lessons/')

OTHER TIPS

Try after removing the leading slash in upload_to argument.

class LessonFile(models.Model):
    ...
    documents = models.FileField(upload_to='uploads/lms/lessons/')
    ...

Update: Removed extra media directory in upload_to argument.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top