2010-06-19 2 views
3

저는 다소간 붙어 있습니다. 잠시 동안 장고를 사용해 왔지만 실제로는이 것을 찾지 못하는 것 같습니다. 그리고 그것은 이상한 일이기 때문에 별난 것입니다.Django FileFields를 사용하여 템플릿에 현재 파일을 표시하는 방법

나는 주위를 둘러 보았고 해결 방법을 찾을 수없는 것처럼 보였습니다. 간단 할 수도 있기 때문일 수 있습니다.

문제는 ModelForm이 있고 모델의 인스턴스로이 양식을 렌더링 할 때 개체에 업로드 된 파일이 포함되어있어 현재 파일을 표시하고 싶습니다. 관리자는 않습니다),하지만 그렇게 할 수 없습니다.

어느 이러한 기술의

작동 : 나는 관리자 템플릿에서 주변 검색을 봤는데,하지만 마법을 찾을 수 없습니다

{{ form.as_p }} 
{{ field.label_tag }} 

. 이 양식은 개체의 다른 모든 데이터를 올바르게 렌더링합니다.

문제 번호 2는 개체의 인스턴스가있는 변경 양식을 렌더링 할 때 업로드 된 파일이 표시되지 않기 때문에 양식을 저장할 때 유효성을 검사하지 못합니다. 이전에 업로드 된 파일에 대해서는 아무 것도 모르기 때문에

그럼 장고의 변경 양식에서 파일 필드를 처리하는 방법, 현재 업로드 된 파일을 표시하는 방법 및 양식의 유효성을 검사하는 방법을 설명합니다.

답변

4

당신은 주변에 충분히 잘 보이지 않았다, 해결책은있는 contrib/관리/widgets.py에서 사용자 정의 위젯, 즉이 하나입니다 ModelForms의 widgets meta option

두 번째 문제가 더 이상 존재하지 않아야한다는 것을 알고있는 한 더 멋진 위젯이 없어도 맞춤 위젯을 사용한 후에도 계속 유지되면 알려주세요.

+1

아, 사용자 정의 위젯,. 슈퍼, 최대한 빨리 시도합니다. – espenhogbakk

+0

'Django.forms'의 정상적인'ClearableFileInput'이 저에게 도움이됩니다. – beruic

0

나는이 snippet을 사용하여 ImageField를 표시합니다 (삭제할 추가 확인란이 있음). 비 이미지 필드를 표시하는 방법을 모르지만이 스 니펫은 영감을 줄 것입니다. 사용

class AdminFileWidget(forms.FileInput): 
    """ 
    A FileField Widget that shows its current value if it has one. 
    """ 
    def __init__(self, attrs={}): 
     super(AdminFileWidget, self).__init__(attrs) 

    def render(self, name, value, attrs=None): 
     output = [] 
     if value and hasattr(value, "url"): 
      output.append('%s <a target="_blank" href="%s">%s</a> <br />%s ' % \ 
       (_('Currently:'), value.url, value, _('Change:'))) 
     output.append(super(AdminFileWidget, self).render(name, value, attrs)) 
     return mark_safe(u''.join(output)) 

당신이 사용할 수 있습니다 (또는 개조 버전) :

0

나는 베루이체의 대답이 주석으로는 충분하지 않다고 생각하지만 장고가 자동으로 수정하므로 그는 실제로 이것을 가지고있다.

"Django.forms의 일반 ClearableFileInput이 나를 대신합니다."

아래 예를 참조하십시오.

그 내가 일하지 않은 이유 models.py

class PosterForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(PosterForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = Poster 

     fields = ('title', 'img') 

     widgets = { 
      'img' : forms.ClearableFileInput(), 
      'title' : forms.TextInput() 
     } 
관련 문제