【问题标题】:Django - Boolean Fields on Checkbox InputDjango - 复选框输入的布尔字段
【发布时间】:2021-05-24 07:09:26
【问题描述】:

我有一个具有布尔字段和 CheckboxInput 的 ModelForm。 Boolean 字段在 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

对此的任何帮助都会很棒。提前感谢您的任何回复。

【问题讨论】:

    标签: django django-models django-forms boolean


    【解决方案1】:

    值要么是"on"(如果用户选中了复选框),要么是存在(如果用户没有选中复选框)。

    因此您可以使用:

    bfbw_data.first_time_booking = request.POST<b>.get(</b>'first_time_booking'<b>)</b> == 'on'

    注意:最好使用Form [Django-doc] 而不是手动验证和清理数据。 Form 不会 仅在 HTML 中简化 渲染 表单,但它也使其更方便 验证输入,并将数据清理为更方便的类型。

    【讨论】:

    • 感谢您的工作,非常感谢您的帮助。是的,我们在代码的其他部分使用了表单,但在使用 Modals 并且需要使用 JSON 和 JQuery 来显示数据时,我似乎无法让它工作。再次感谢。
    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多