2013-03-20 2 views
0

누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다.Django FileSystemStorage get_available_name 반환 이름 및 개수

기본 Django FileSystemStorage 함수 인 get_available_name은 해당 FileField의 db에 저장되는 이름 만 반환합니다. 이 같은

원래 get_available 이름의 모양을

def get_available_name(self, name): 

    dir_name, file_name = os.path.split(name) 
    file_root, file_ext = os.path.splitext(file_name) 
    count = itertools.count(1) 
    while self.exists(name): 
     name = os.path.join(dir_name, "%s_%s%s" % (file_root, count.next(), file_ext)) 

    return name 

어떻게 가능성도 계산 반환 할 수 있습니다. 내가 (name, count)와 같은 튜플을 반환하려고 시도하고 get_available_name 이후에 실행되는 해당 저장 메소드를 수정하려고했지만 카운트를 잡는 데 성공하지 못했습니다.

class DataFile(models.Model): 
    title=models.CharField(max_length=255, unique=False, blank=False) 
    file=models.FileField(max_length=255, blank=False, storage=fs, upload_to=get_path) 

뷰 :

def save_uploaded_datafile(request): 
    ### get request.FILES and save it 
    f=DataFile() 
    f.file=request.FILES['DataFile'] 
    f.title=f.file.name 
    f.save() 

이 어떻게 가능한 추가 처리를 위해보기에 저장할 수 get_available_name에서 수를 반환 할 수를 배경은 내가이 같은 관점에서 저장 파일 클래스를 가지고 있는지? 도움을 주신 분께 감사드립니다. Thx!

추신 : 게시 된 코드는 실행되지 않습니다. 의사 코드와 비슷하지만 아이디어를 얻길 바랍니다.

+0

왜 그 이름을 쪼개고 카운트를 얻지 못합니까? – catherine

+0

맞나요? 나는 그것에 대해 생각해 보았습니다. 왜 여기에 "힘겨운 길"을 취하고 있는지 알지 못합니다 ... – Jingo

답변

0

그냥() f.save에 의해 반환되는 파일 이름을 확인할 수 있습니다 :

file_name = f.save() 
count = None 
if file_name not f.title: 
    file_root, file_ext = os.path.splitext(file_name) 
    my_root, my_ext = os.path.splittext(f.title) 
    # Add one to the length of my_root to capture the '_' 
    root_length = len(my_root)+1 
    count = int(file_root[root_length:]) 

이 조금 더 비싼 다시 카운트를 전달하는 방법을 찾는 것보다,하지만 그 트릭을 할해야합니다.

+0

그게 아닙니다. 대답. – Jingo