Логическое поле, возвращающее значение True в формах django

#django #django-forms

#django #django-forms

Вопрос:

У меня есть очень простая форма

 class IcraveSatisfiedForm(forms.Form):
    satisfied_or_not = forms.BooleanField(label="Was your Crave satisfied?")
    satisfier = forms.CharField(label="Satisfier")



    def clean_satisfier(self):
        satisfier = self.cleaned_data['satisfier']
        satisfied = self.cleaned_data['satisfied_or_not']
        if satisfied == True:
          if satisfier !='':
            try:
                user = User.objects.get(username__iexact = satisfier)
            except:
                user = None
            if not user :
                raise forms.ValidationError('The username is not valid')
            else:
                return user
          else:
            return None
  

Я хочу очистить эту форму и проверить оба используемых значения.Но по какой-то причине
self.cleaned_data[‘satisfied_or_not’] всегда возвращает True. Что я делаю не так?

Редактировать:

Я тоже пробовал это, на мой взгляд

 def my_craves(request,crave_id = None):
    craves = Icrave.objects.filter(person = request.user,satisfied_or_not = False)
    if request.method == 'POST':
        if 'satisfied_or_not' in request.POST:
            my_craves_form =IcraveSatisfiedForm(request.POST,user = request.user)
            if my_craves_form.is_valid() :
                satisfied = my_craves_form.cleaned_data['satisfied_or_not']
                satisfier = my_craves_form.cleaned_data['satisfier']
  

Оно по-прежнему возвращается как True

Запрос.Публикация

 <QueryDict: {u'csrfmiddlewaretoken': [u'21bdde0fdac2b18101e1c42ba2f92843'], u'satisfier': [u'admin'], u'satisfied_or_not': [u'Update']}>
  

Я использую обычную форму для отображения данных

  my_craves_form = IcraveSatisfiedForm()
    return render( request, 'icrave/view/my_craves.html', {'craves' : craves,'my_craves_form':my_craves_form})
  

Комментарии:

1. у вас действительно есть два поля с одинаковыми именами?

2. Не моя ВИНА .. скопировано неправильное поле

3. Не могли бы вы показать значение request.POST?

4. как вы генерируете HTML-форму? флажок не должен возвращать строку…

Ответ №1:

clean_FOO предназначено только для очистки одного поля и должно возвращать очищенные данные, ничего больше.

для проверки по нескольким полям используйте clean метод, который должен возвращать весь cleaned_data dict

смотрите документы для получения дополнительной информации

Ответ №2:

Глядя на ваше request.POST , satisfied_or_not не должно быть строки для логического поля.

 <QueryDict: {u'csrfmiddlewaretoken': [u'21bdde0fdac2b18101e1c42ba2f92843'], u'satisfier': [u'admin'], u'satisfied_or_not': [u'Update']}>  
  

Похоже, вы могли бы использовать название satisfied_or_not для кнопки отправки формы, а также флажок. Например:

 <p><input type="submit" name="satisfied_or_not" value="Update" /></p>
  

Если это так, вам нужно изменить его на что-то вроде

 <p><input type="submit" name="update" value="Update" /></p>
  

Комментарии:

1. Несмотря на то, что приведенное выше значение было истинным, оно все равно возвращает значение true после его изменения.

2. Не могли бы вы обновить значение request.POST и показать нам свой шаблон?