upload_to in FileField

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)