Подтвердить что ты не робот

Как сделать FileField в django необязательным?

У меня есть форма с текстовым полем и файловым полем в django. Это должно позволить использовать либо вставить текст в это поле, либо загрузить файл. Если пользователь вставил текст в поле, мне не нужно проверять файл.

Как мне сделать form.FileField() необязательно?

4b9b3361

Ответ 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 %}