2013-06-19 5 views
1

나는 아주 이상한 문제의 중간에있다. 이제왜 file.url은 django의 file.path와 동일한 값을 반환합니까?

class MyModel(models.Model): 
    name = models.CharField(max_length=32) 
    audio_file = models.FileField(upload_to='user_menus/', default='%suser_menus/default.mp3' % settings.MEDIA_ROOT, blank=True, null=False) 

가, 내가 할 때 다음

내가 내 MEDIA_ROOT 및 MEDIA_URL 같이 구성한
>>> a = MyModel(name='Foo') 
>>> a.save() 
>>> a.audio_file.path 
'/full/path/to/file' 
>>> a.audio_file.url 
'/full/path/to/file' # again 

을 다음과

나는 다음과 같이 선언 된 모델에 기본 값으로 FileField와이

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'static/') 
MEDIA_URL = '/media/' 

나는 것이 누락가 되었습니까? 어떤 조언이 필요합니까?

미리 감사드립니다.

+0

URL 도메인 앞에 템플릿이있는 것을 볼 수 있습니다. 차이점은 다음과 같습니다. https://docs.djangoproject.com/en/dev/topics/files/#using-files-in-models – karthikr

답변

3

의 기본값을 전체 경로가 아닌 데이터베이스에 저장하려는 실제 값 (문자열)을 지정해야합니다. 그렇기 때문에 .url이 그런 식으로 나타나고있는 것입니다. 귀하의 경우는 다음과 같이해야합니다 경우 :

audio_file = models.FileField(upload_to='user_menus/', default='%suser_menus/default.mp3' % settings.MEDIA_URL, blank=True, null=False) 

공지 사항 난 그냥 default가 데이터베이스에 삽입 될 때이 문제가 있습니다 생각.

희망이 도움이됩니다.

+0

감사합니다. 그런 식으로 처리하려고 시도했지만 SuspicipusOperation 오류가 발생했습니다. :-(. – israelord

+0

'슬래시'로 조금 놀아보십시오. 대신에'upload_to = 'user_menus''시도해보십시오. 때로는 그런 일이 생깁니다. 또한/media 경로를 하드 와이어 연결하는 대신 내 대답을 편집했습니다. 하지만'MEDIA_ROOT' 대신'MEDIA_URL'을 사용합니다. –

+0

기본값을 user_menus/defaul.mp3으로 변경하고 문제를 해결했습니다.대단히 감사합니다. – israelord

2

문제의 원인이 될 수도 있고 없을 수도있는 몇 가지 것이 필요하다고 생각하지 않습니다. 나는 다음 코드가 생산 (Django 1.5)에서 완벽하게 작동한다. models.py :

... 
    decision_file = models.FileField(
     upload_to = "guidance", 
     blank = True, 
     help_text = "20MB maximum file size." 
    ) 
... 

그리고 내 기본 settings.py에서

: 나는 정적 및 미디어 파일에 대한 별도의 경로와 URL을 정의하고 있습니다

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), '../../media') 

MEDIA_URL = '/media/' 

STATIC_ROOT = os.path.join(os.path.dirname(__file__), '../../static/') 

STATIC_URL = '/static/' 

알 수 있습니다. 기본 설정에 % settings.MEDIA_ROOT 형식 문자열을 포함시켜야한다고 생각하지 않습니다 (Paulo Bu의 대답 참조) 또는 upload_to 매개 변수의 후행 슬래시를 사용하십시오. 요약 업로드 폴더가

  1. 검사에서

    ;

  2. 정적 및 미디어 경로와 URL을 별도로 설정합니다.
  3. 오류 메시지에서 형식 문자열을 제거하십시오. 및
  4. upload_to 매개 변수

에서 후행 슬래시를 제거하고 작동 코드가 있어야합니다.

관련 문제