#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
и показать нам свой шаблон?