2011-05-09 4 views
16

Django'da bir metin kutusu ve dosya alanı ile formum var. Kullanımın metni bu kutuya yapıştırmasına veya bir dosya yüklemesine izin vermelidir. Kullanıcı metni kutuya yapıştırdıysa, fileField'ı kontrol etmem gerekir.Django'da FileField nasıl yapılır?

Formları nasıl oluştururum.FileField() isteğe bağlı? Bir forms.Form türetilmiş sınıfta bir forms.FileField() kullanıyorsanız

cevap

37

, ayarlayabilirsiniz: Bir models.FileField() kullanıyorsanız

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

ve bu modelin atanmış bir forms.ModelForm varsa, kullanabilirsiniz

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

Kullandığınız, formu nasıl türettiğinize ve temel ORM'yi (örneğin, bir model) kullanıyorsanız, bağlı olarak değişir.

+0

teşekkürler! Bu benim problemimi çözüyor :) – tamizhgeek

+5

"CharField'in" null = True "değerine sahip olmaması gereken yerlerde okumuştum. Çünkü FileField'ın aslında" CharField "olduğu için bu gerçekten gitmek için bir yol mu? –

0

kullanıcıya daha önce bu yapmak istiyorsanız bunu yapabileceği Django tarafında

(tümü bazı hızlı olduğu için yöntemler sunuyoruz vb, jquery mootools) javascript kullanarak bunu gerekecektir form gönderdiğinde formdaki temiz bir yöntemle. Bu, başlamanızı sağlamalı ve kullanıcının bunları görmesi için şablonunuzdaki doğrulama hatalarını görüntülemeniz gerekir. Temiz yöntemin adı, form alanı adıyla eşleşen "clean_" ile eşleşmelidir. şablonu

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 %}