в settings.py добавьте указание на расположение медиа
MEDIA_URL = '/media/' #например
MEDIA_ROOT = '/srv/files/media' #например
media_url - часть урла, по которому будут находиться картинки, media_root - место на сервере, где nginx будет их искать.
в модели:
class ModelClass(models.Model):
<поле> = models.ImageField(upload_to=rename_image, blank=True, verbose_name='...')
def rename_image(instance, filename):
image_name = md5(str(time.time()).encode()).hexdigest()
image_type = filename.split('.')[-1]
return 'imgs/{}.{}'.format(image_name, image_type)
rename_image в моем случае переименовывает загружаемую картинку в хэш. и в return можно добавить путь. в моем случае будет загружаться в media_root/imgs/<что-то>.jpg #например (при условии, что media_root определен, все всегда будет падать туда)
добавьте в путь подкаталог с именем user_{его id}. а вот насчет доступности только для этого пользователя - надо отдельно думать.