django-ckeditor
Если нужен ImageField:
class YourModel(Model):
# ...
image = ImageField(upload_to='images/', null=True, blank=True)
Параметр upload_to является обязательным и принимает строку или функцию. Изображения будут складываться в папку media/upload_to, где upload_to - то, что вы указали в параметре upload_to. Функция (если строка вас не устраивает) будет вызвана и в неё передадутся два аргумента - instance и filename - экземпляр модели и имя файла. Вернуть вы должны путь до файла вместе с файлом (например: images/hello/world/some_file.jpg). Например, я использовал такую:
def generate_path(instance, filename):
ext = filename.rsplit('.', 1)[-1]
h = md5(instance.user.username.encode()).hexdigest()
result = 'photos/%s/%s/%s.%s' % (h[:2], h[2:4], h[4:], ext)
path = os.path.join(settings.MEDIA_ROOT, result)
if os.path.exists(path):
os.remove(path)
return result
Такая иерархия нужна, чтобы в одной папке не накапливалось много файлов, иначе система может работать долго.
Updated
Обязательно укажите MEDIA_ROOT и MEDIA_URL в настройках. Допустим, так:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'