Checkbox django return all false
Мой флажок всегда возвращает значение False моя модель
ho_so_giu=models.BooleanField(default=False)
моя форма
ho_so_giu = forms.BooleanField(label="Hồ sơ giữ", widget=forms.CheckboxInput(attrs={'class': 'form-check-input', 'id': 'ho_so_giu_text', 'name': 'ho_so_giu_text',}),required=False)
в моем html-шаблоне
<div class="form-check form-switch">
{{form.ho_so_giu}}
<label class="form-check-label" for="ho_so_giu_text">Hồ sơ giữ</label>
</div>
с моей точки зрения,
print(form.cleaned_data["ho_so_giu"]) ## return False
print(request.POST.get("ho_so_giu")) ## return None
print(request.GET.get("ho_so_giu")) ## return None
если я пытаюсь распечатать ho_so_giu_text, он выдает ошибку
print(form.cleaned_data["ho_so_giu_text"])
KeyError: 'ho_so_giu_text'
Я использую ajax для возврата значения из кода
ho_so_giu =$('#ho_so_giu_text').val() //return on
Спасибо, что прочитали, помогите мне
Я думаю, что проблема может быть связана с вашей формой, попробуйте следующее:
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['ho_so_giu']
widgets = {
'ho_so_giu': forms.CheckboxInput(
'class': 'form-check-input',
'id': 'ho_so_giu_text',
'name': 'ho_so_giu_text'
)
}
Примечания:
- Я не знаю, почему вы дали имя форме. Я никогда не видел этого раньше. Может быть, это создает проблемы с почтовым запросом к бэкенду?
- Пробовали ли вы создать форму на фронтенде самостоятельно? Используя только html? Это было бы хорошим способом отладить проблему.
- Рассмотрите возможность написания гибридной формы, в основном на html, с динамическими элементами. Это позволит вам точно отслеживать происходящее. Посмотрите пример ниже:
<input name="{{ wc_user_form.last_name.name }}" type="text" class="form-control" id="{{ wc_user_form.last_name.auto_id }}" placeholder="Votre Nom" oninput="customValidation(this);" required>
<label for="{{ wc_user_form.last_name.auto_id }}">{{ wc_user_form.last_name.label }}</label>
Довольно круто, а? Обратите особое внимание на тег шаблона {{ form.field.auto_id }}
. Он, как вы можете себе представить, генерирует id поля, которое ожидает бэкенд, чтобы выполнить form.save()