Django -复选框输入的布尔字段

aurhwmvo  于 2023-01-14  发布在  Go
关注(0)|答案(1)|浏览(162)

我有一个ModelForm,它有布尔字段和CheckboxInput。布尔字段在MYSQL数据库中默认提供0(假)和1(真)的值。
表单是模态的,使用JSON从模型输出内容,当JSON文件添加内容时,它输入True或False。
当我尝试将复选框输入的值从False更改为True并提交时,出现此问题。当我尝试此操作时,收到以下消息:

奇怪的是,这正好相反,允许我提交从True到False的更改。
下面是代码(我只包含了问题的字段。)字段是First_Time_Booking
模特。

first_time_booking = models.BooleanField()

表单小部件。

'first_time_booking': CheckboxInput(attrs={'class': 'form-check-input', 'id': 'bfbw_edit_first_time_booking', 'name': 'bfbw_edit_first_time_booking'}),

视图

def update_bfbw(request):
    if request.method == 'POST':
        bfbw_booking_id = request.POST.get('bfbw_booking_ref')
        bfbw_data = BFBWBookings.objects.get(id=bfbw_booking_id)
        bfbw_data.school_name = request.POST['school_name']
        bfbw_data.first_time_booking = request.POST.get('first_time_booking', False)
        bfbw_data.save()
    else:
        print(form.errors)
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

我试过写一个if函数来改变值,这个函数可以把值改变为on,但是在关闭它的时候不行。

if request.POST['first_time_booking'] == 'on':
            bfbw_data.first_time_booking = True
        else:
            bfbw_data.first_time_booking = False

任何帮助这将是伟大的。提前感谢任何答复。

ax6ht2ek

ax6ht2ek1#

该值为"on"(如果用户已选中复选框)或does not exists(如果用户未选中复选框)。
因此,您可以使用:

bfbw_data.first_time_booking = request.POST.get('first_time_booking') == 'on'

注意:最好使用Form [Django-doc],而不是手动验证和清理数据。Form不仅可以简化以HTML格式呈现表单的过程,而且可以更方便地验证输入,并将数据清理为更方便的类型。

相关问题