ฉันใช้ BooleanField ใน django โดยค่าเริ่มต้นช่องทำเครื่องหมายที่สร้างขึ้นจะเป็นสถานะที่ไม่ถูกเลือกฉันต้องการให้ตรวจสอบสถานะโดยค่าเริ่มต้นจะทำอย่างไร?
ฉันใช้ BooleanField ใน django โดยค่าเริ่มต้นช่องทำเครื่องหมายที่สร้างขึ้นจะเป็นสถานะที่ไม่ถูกเลือกฉันต้องการให้ตรวจสอบสถานะโดยค่าเริ่มต้นจะทำอย่างไร?
คำตอบ:
หากคุณแค่ใช้รูปแบบวานิลลา (ไม่ใช่ ModelForm) คุณสามารถตั้งค่าเริ่มต้นของฟิลด์ได้ ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field เริ่มต้น ) เช่น
class MyForm(forms.Form):
my_field = forms.BooleanField(initial=True)
หากคุณใช้ ModelForm คุณสามารถตั้งค่าเริ่มต้นในฟิลด์โมเดล ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ) ซึ่งจะนำไปใช้กับ ModelForm ที่เป็นผลลัพธ์ , ชอบ
class MyModel(models.Model):
my_field = models.BooleanField(default=True)
สุดท้ายหากคุณต้องการเลือกแบบไดนามิกที่รันไทม์ว่าฟิลด์ของคุณจะถูกเลือกตามค่าเริ่มต้นหรือไม่คุณสามารถใช้พารามิเตอร์เริ่มต้นกับฟอร์มเมื่อคุณเริ่มต้น :
form = MyForm(initial={'my_field':True})
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
initial
ในเอกสาร (สำหรับรูปแบบที่ไม่ถูกผูกไว้) แต่ไม่ใช่default
ฉันใช้ django == 1.11 คำตอบที่ได้รับการโหวตมากที่สุดนั้นผิดจริง ตรวจสอบเอกสารจาก django มันบอกว่า:
initial - ค่าที่จะใช้ในการแสดงผลเริ่มต้นของฟิลด์นี้ ค่านี้จะไม่ใช้เป็นทางเลือกหากไม่ได้ให้ข้อมูล
และถ้าคุณเจาะลึกโค้ดของกระบวนการตรวจสอบแบบฟอร์มคุณจะพบว่าสำหรับแต่ละฟิลด์แบบฟอร์มจะเรียกมันว่าวิดเจ็ต value_from_datadict
เพื่อรับค่าจริงดังนั้นนี่คือที่ที่เราสามารถฉีดค่าเริ่มต้นได้
ในการทำเช่นนี้BooleanField
เราสามารถสืบทอดจากCheckboxInput
แทนที่ค่าเริ่มต้นvalue_from_datadict
และinit
ฟังก์ชัน
class CheckboxInput(forms.CheckboxInput):
def __init__(self, default=False, *args, **kwargs):
super(CheckboxInput, self).__init__(*args, **kwargs)
self.default = default
def value_from_datadict(self, data, files, name):
if name not in data:
return self.default
return super(CheckboxInput, self).value_from_datadict(data, files, name)
BooleanField
จากนั้นใช้เครื่องมือนี้เมื่อมีการสร้าง
class ExampleForm(forms.Form):
bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
Django 3.0
เช่นกัน ขอบคุณ.
ใน DJango 3.0 ค่าเริ่มต้นของ BooleanField ใน model.py ถูกตั้งค่าดังนี้:
class model_name(models.Model):
example_name = models.BooleanField(default=False)
form = MyForm(initial={'my_field':True})
ฉันไม่พบในเอกสารในทันที