@nik9019

Как передать из формы значение True или False в models.BooleanField()?

Подскажите, пожалуйста, как передать из формы значение True или False в БД.

Значение поля формы - status = forms.BooleanField(required=False).
Строка в модели - status = models.BooleanField()

Форма (без некоторых атрибутов):
class CreateForm(forms.Form):
    ORDER_CHOICES =( #...какой-то список
    )
    data = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}), required=True)
    status = forms.BooleanField(required=False)    
    time = forms.TimeField(widget=forms.TimeInput(attrs={'type': 'time'}), required=True)
    order_type = forms.ChoiceField(choices = ORDER_CHOICES, widget=forms.RadioSelect(), required=True)
    name = forms.CharField(max_length=60, required=False)
    count = forms.IntegerField(required=False, widget=forms.TextInput(attrs={'value': '0', 'type':'number'}))
    comment = forms.CharField(widget=forms.Textarea, required=False)


Модель БД:
class Order(models.Model):
    data = models.DateField()
    status = models.BooleanField()
    time = models.TimeField(null=True)
    order_type = models.CharField(max_length=20)
    name = models.CharField(max_length=60, null=True)
    count = models.IntegerField(null=True)
    comment = models.CharField(max_length=60, null=True)


При попытке передать значение методом POST возникает следующая ошибка:
Exception Type: ValidationError
Exception Value: ['“on” value must be either True or False.']
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ответы на вопрос 2
Andrew_Pinkerton
@Andrew_Pinkerton
Backend-разработчик
В шаблоне должно быть нечто похожее на это:

<input checked="checked" type="checkbox" name="status" value="True" id="id_status" />


value="True" у вас “on” value
Ответ написан
@nik9019 Автор вопроса
Сейчас не хватает времени разобраться как сделать так, чтобы checkbox сразу отдавал True или False, а не 'on', поэтому в представлении сделал следующее (может кому-то это поможет):
if request.method == "POST":
        orders = Order()
        orders.data = request.POST.get("data")
        orders.time = request.POST.get("time")
        st = request.POST.get("status")
        if st == 'on':
            st = True
        else:
            st = False
        orders.status = st
        #какой-то код дальше...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Junto Москва
от 80 000 до 120 000 ₽
Верфь Екатеринбург
от 70 000 до 140 000 ₽
Maroom Москва
от 100 000 до 160 000 ₽