use upload_to
to set upload directory. it can be a string or alternatively a function
file = models.FileField(upload_to=upload_directory_path, blank=True, null=True)
def upload_directory_path(instance, filename):
from hashlib import md5
from datetime import date
upload_time = date.today().strftime("%Y-%m-%d_%H-%M-%S")
user_hash = int(md5(instance.user.pk.encode("utf-8")).hexdigest(), 16)
return "uploads/{0}/{1}/{2}".format(user_hash, upload_time, filename)