Как сделать FileField в django необязательным? - PullRequest
22 голосов
/ 09 мая 2011

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

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

Ответы [ 2 ]

42 голосов
/ 09 мая 2011

Если вы используете 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 (то есть модель).

0 голосов
/ 09 мая 2011

, если вы хотите сделать это до того, как пользователь отправит форму, которую вам нужно будет сделать с помощью 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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...