2011-03-14 5 views
4

내 관리 인터페이스에 ImageField가있는 양식이 있습니다. 다른 필드가 유효성 검사 오류를 발생시킬 때를 제외하고는 모두 잘 작동합니다. 이러한 경우 양식은 사용자에게 수정을 위해 반환되지만 이미로드 된 이미지 파일은 양식에서 지워집니다.장고의 유효성 검사 오류 후 ImageField에서 이미지를 다시 제출

이미지를 저장하도록 이미지에 이미 제출 된 이미지를 다시로드하는 방법에 대한 아이디어가 있습니까?

감사합니다. 코드의

몇 가지 흥미로운 비트 :

class DealForm(forms.ModelForm): 
    image = forms.ImageField(required=False,widget=AdminImageWidget) 

    def clean(): 
     data = self.cleaned_data 
     date_start = data.get('date_start') 
     date_end = data.get('date_end') 
     (... several other validations ...) 
     return data 

.

class AdminImageWidget(forms.FileInput): 
    def __init__(self, attrs={}): 
     super(AdminImageWidget, self).__init__(attrs) 

    def render(self, name, value, attrs=None): 
     output = [] 
     if value and hasattr(value, "url"): 
      output.append(('<a target="_blank" href="%s">' 
          '<img src="%s" /></a> ' 
          % (value.url, value.url_200x150))) 
     output.append(super(AdminImageWidget, self).render(name, value, attrs)) 
     return mark_safe(u''.join(output)) 

답변

6

HTML <input type="file"> 필드에는 데이터가 미리 채워질 수 없습니다. 따라서 다른 필드에서 유효성 검사가 실패하면 이미지를 다시 선택해야합니다.

이것은 HTML/브라우저 보안 조치입니다. 에서와 마찬가지로, 주위에!

사이트가 C:\Windows\something_important을 페이지 모서리에있는 양식에 삽입 할 수 있다고 상상해보십시오. 이 중요한 기능이있는 경우


, 당신은 할 수 ...

  1. 파일을 강제로 폼 유효성 검사를하기 전에 업로드
  2. 가 템플릿을 설정 사용자 세션에 파일 이름을 숨길 수 파일이 업로드되면 다시 표시 할 때 "성공"메시지 표시
  3. 세션에 업로드 정보가 포함되어있을 때 파일 필드 유효성 검사 사용 안 함
  4. 유효한 유효 fo rm 제출
5

다음은 django-app-resubmit이라는 django 응용 프로그램입니다. 이 문제를 정확히 해결합니다.

https://github.com/un1t/django-file-resubmit

+0

그것은 단지 관리 형태의 해결인가? 정규 양식에 대한 위젯 예제를 볼 수 없기 때문입니다. – alexche8

+0

예, 관리자 용입니다. – un1t

관련 문제