2011-08-09 3 views
0

프로젝트에 속한 사진 인 시스템을 만들고 싶습니다. 나는 또한 프로젝트에 대해 zip 파일을 직접 업로드 할 수 있으며, 압축을 풀고 지정한 프로젝트에 사진을 등록 할 수있게되었습니다. 그러나 Photo 클래스를 정의하는 동안 문제가 발생합니다.장고, 모델 내 ForeignKey 값 사용

Project.file_zip.path의 값을 img 필드의 upload_to 속성을 정의하는 현재 인스턴스와 함께 가져와야합니다. 그러나, 내가 아래처럼 시도했을 때 AttributeError: 'ForeignKey' object has no attribute 'file_path'과 함께 반환됩니다. 어떻게 수정해야합니까?

class Project(models.Model): 
.... 
owner=models.ForeignKey(User) 
file_zip=models.FileField(upload_to='projects/%Y/%m/%d') 

def __unicode__(self): 
    return self.project_name 

def file_path(self): 
    return re.search(re.search('[^\s]+(?=\.zip)', self.file_zip).group(0)) 

class Photo(models.Model): 
    belongs_to=models.ForeignKey(Project) 
    img=models.ImageField(upload_to='/home/contact/python_project/all_bugs_will_reveal/'+belongs_to.file_path()) 
    desc=models.CharField(max_length=255) 

답변

3

당신은 정의가 클래스를 읽고있는 시점에서로, 같은 모델의 정의에 모델의 필드를 참조 할 수 없습니다 아직 정의되지 않았습니다.

이 솔루션은 upload_to에 대한 호출을 사용하는 것입니다 - in the documentation을 같이 올바른 경로를 얻을 수 instance.filepath()를 호출 할 수 있도록이, 매개 변수 instancefilename 주어진 함수가 될 수 있습니다.

+0

귀하의 지시를 따르려고하지만; 어느 쪽이든 함수를 잘못 정의했거나 올바른 방법으로 호출하지 않습니다. 'TypeError : project_path()와 함께'% s/% s '% (instance.belongs_to.file_path, 파일 이름)'및'img = models.ImageField (upload_to = project_path())'를 반환합니다 : def project_path (인스턴스, 파일 이름) : 반환합니다.()는 정확히 2 개의 인수 (0이 주어진다.)' –

+0

은'ImageField (upload_to = project_path)'이어야하며 대괄호는 사용하지 않는다. 그렇지 않으면 파일이 업로드 될 때가 아니라 매개 변수없이 양식이 정의 될 때 함수가 호출됩니다. –

+0

예, 실제로 올바른 코드를 작성했지만 다른 곳에서 실수를했고 버그를 찾으려고 할 때도 변경되었습니다. 이제 잘 작동합니다. 감사. –