Django clean работает на необязательном поле - PullRequest
0 голосов
/ 08 октября 2018

В моей форме есть необязательное поле с именем into_alias.Когда form.valid () вызывается на мой взгляд, он пытается запустить clean_into_alias для проверки этого поля.

Однако, если значение для поля не указано, оно все еще пытается очистить его, и я получаю эту ошибку:

DoesNotExist at /department/b6c1f70de01d488faac5247f54414b5f/merge/delete
{'name_short': ''}

forms.py

class DeptMergeDeleteForm(forms.Form):
      def __init__(self, *args, **kwargs): 
        self.department = kwargs.pop('department', None)
        super(DeptMergeDeleteForm, self).__init__(*args, **kwargs)

  into_alias = forms.CharField(
    required = False,
    max_length = 51,
    label = mark_safe("""When you delete this department, do you want to merge its members into another department? If so, please provide the alias of the department that you want to merge these employees into "e.g. @tech_support")"""),
    validators=[valid_dept_alias_chars, valid_dept_alias_exists,],
  )

  def clean_into_alias(self):
    dept_drop = self.department

    data = self.cleaned_data['into_alias']
    dept_into = Department.nodes.get(name_short=data) #<------- ERROR -------

    if dept_into == dept_drop:
      raise ValidationError("You cannot merge your members into the same department that you are about to drop ;)")

    # return the cleaned data
    return data

Может быть {'name_short': ''} это пустая строка, а не None?Я вижу в моих местных переменных, что data =''

1 Ответ

0 голосов
/ 08 октября 2018
    data = self.cleaned_data.get('into_alias', None)
    if data is not None:
        try:
            dept_into = Department.nodes.get(name_short=data)
            if dept_into == dept_drop:
                raise ValidationError("You cannot merge your members into the same department that you are about to drop ;)")
        except Department.DoesNotExist:
            pass
    return data 
...