Django не видит checkbox
Django не видит checkbox в форме и вызывает MultiValueDictKeyError. Вот код:
contact.html:
<form method='post' action=" ">
{% csrf_token %}
<div class="row">
<div class="col-md-6">
<div class="form-group mb-20">
<input type="text" name="name" class="form-control" required placeholder="Ваше имя">
</div>
</div>
<div class="col-md-6">
<div class="form-group mb-20">
<input type="email" name="email" class="form-control" required placeholder="Email">
</div>
</div>
<div class="col-12" style="margin-top: 15px;">
<div class="form-group mb-20">
<input type="text" name="quest" class="form-control" required placeholder="Вопрос">
</div>
</div>
<div class="col-12" style="margin-top: 15px;">
<div class="form-group mb-20">
<textarea name="message" class="form-control" cols="30" rows="8" placeholder="Сообщение"></textarea>
</div>
</div>
<div class="col-lg-12">
<div class="custom-checkbox mb-20" style="margin-top: 15px;">
<input id="checkbox" name="terms" type="checkbox" class="input-checkbox" placeholder="" value=""> <!-- ошибка здесь (не видит name="terms" и в views.py в request.POST terms нету) -->
<label class="form-check-label" for="checkbox"><span> Я принимаю <a href="{% url 'terms-conditions' %}">лицензионное соглашение</a> </label>
</div>
</div>
<div class="col-md-12">
<button class="btn btn-lg btn-primary rounded-pill" type="submit" aria-label="Send Message">Отправить сообщение</button>
</div>
</div>
</form>
views.py:
def contact(request):
settings = Settings.objects.latest('id')
last_blog = Blog.objects.latest('id')
contact = Contact.objects.latest('id')
message = ''
show_message = False
not_terms = False
if request.method == 'POST':
show_message = True
try: #выводит "Ошибка при отправке обращения". но если убрать try выдает MultiValueDictKeyError
terms = request.POST['terms']
if terms == ['off']:
not_terms = True
raise
name = request.POST['name']
if len(name) > 255:
raise
email = request.POST['email']
if len(email) > 255:
raise
quest = request.POST['quest']
if len(quest) > 255:
raise
message = request.POST['message']
if len(email) > 50:
raise
HelpMessage.objects.create(name=name, email=email, quest=quest, message=message)
message = 'Обращение успешно созданo!'
except Exception:
if not_terms:
message = 'Ошибка: Политика конфиденциальности не принята.'
else:
message = 'Ошибка при отправке обращения.'
return render(request, 'contact.html', locals())
urls.py
urlpatterns = [
path('contact/', contact, name='contact'),
]
models.py
class HelpMessage(models.Model):
name = models.CharField(
verbose_name='Имя',
max_length=255
)
email = models.EmailField(
verbose_name='Email'
)
quest = models.CharField(
verbose_name='Вопрос',
max_length=255
)
message = models.TextField(
verbose_name='Сообщение'
)
def __str__(self):
return self.title
class Meta:
verbose_name = 'Обращение в поддержку'
verbose_name_plural = 'Обращения в поддержку'