Как сделать FileField в django необязательным?
У меня есть форма с текстовым полем и файловым полем в django. Это должно позволить использовать либо вставить текст в это поле, либо загрузить файл. Если пользователь вставил текст в поле, мне не нужно проверять файл.
Как мне сделать form.FileField() необязательно?
Ответы
Ответ 1
Если вы используете forms.FileField()
в производном классе forms.Form
, вы можете установить:
class form(forms.Form):
file = forms.FileField(required=False)
Если вы используете models.FileField()
и имеете forms.ModelForm
, назначенные этой модели, вы можете использовать
class amodel(models.Model):
file = models.FileField(blank=True, null=True)
Что вы используете, зависит от того, как вы извлекаете форму, и если вы используете базовую ORM (т.е. модель).
Ответ 2
если вы хотите сделать это до того, как пользователь представит форму, которую вам нужно будет сделать, используя javascript (jquery, mootools и т.д., все предлагают некоторые быстрые методы для этого)
на стороне django вы можете сделать это в чистом методе в форме. Это должно заставить вас начать, и вам нужно будет отобразить эти ошибки проверки на вашем шаблоне, чтобы пользователь мог их увидеть. Имя метода 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 %}