2011-05-09 8 views
16

나는 django에 텍스트 상자와 파일 필드가있는 양식이 있습니다. 그것은 그 상자에 텍스트를 붙여 넣거나 파일을 업로드하는 데 사용해야합니다. 사용자가 텍스트를 상자에 붙여 넣은 경우 fileField를 확인할 필요가 없습니다.django에서 FileField를 선택적으로 만드는 방법은 무엇입니까?

forms.FileField()를 선택적으로 만들 수 있습니까? 당신이 forms.Form 파생 클래스에서 forms.FileField()를 사용하는 경우

답변

37

, 당신이 설정할 수 있습니다 당신이 models.FileField()를 사용하는 경우

class form(forms.Form): 
    file = forms.FileField(required=False) 

을하고 그 모델에 할당 된 forms.ModelForm을 가지고, 당신은 사용할 수 있습니다

class amodel(models.Model): 
    file = models.FileField(blank=True, null=True) 

당신이 사용하는 방식은 양식을 파생하는 방법과 기본 ORM (즉, 모델)을 사용하는 경우에 따라 다릅니다.

+0

감사합니다! 그게 내 문제를 해결 :) – tamizhgeek

+5

'CharField'는'null = True'를 가져서는 안되는 장소에서 읽었습니다.'FileField'는 본질적으로'CharField'이므로, 실제로 갈 길이 멀지 않습니까? –

0

당신이 사용자 전에이 작업을 수행하려면 당신이 그렇게 할 수있는 장고 측

(모두 몇 가지 빠른 그 방법을 제공하는 등, JQuery와 Mootools의)을 당신은 자바 스크립트를 사용하여 그렇게 할 필요가 양식을 제출 형태로 깨끗한 방법으로. 이 작업을 시작해야하며 사용자가 볼 수 있도록 템플릿에 이러한 유효성 검증 오류를 표시해야합니다. clean 메소드의 이름은 양식 필드 이름 앞에 "clean_"가 붙어야합니다. 템플릿에

def clean_textBoxFieldName(self): 
    textInput = self.cleaned_data.get('textBoxFieldName') 
    fileInput = self.cleaned_data.get('fileFieldName') 

    if not textInput and not fileInput: 
    raise ValidationError("You must use the file input box if not entering the full path.") 
    return textInput 

def clean_fileFieldName(self): 
    fileInput = self.cleaned_data.get('fileFieldName') 
    textInput = self.cleaned_data.get('textBoxFieldName') 
    if not fileInput and not textInput: 
    raise ValidationError("You must provide the file input if not entering the full path") 
    return fileInput 

{% if form.errors %} 
    {{form.non_field_errors}} 
    {% if not form.non_field_errors %} 
    {{form.errors}} 
    {% endif %} 
{% endif %} 
관련 문제