django: BooleanField วิธีตั้งค่าเริ่มต้นเป็นจริง


108

ฉันใช้ BooleanField ใน django โดยค่าเริ่มต้นช่องทำเครื่องหมายที่สร้างขึ้นจะเป็นสถานะที่ไม่ถูกเลือกฉันต้องการให้ตรวจสอบสถานะโดยค่าเริ่มต้นจะทำอย่างไร?

คำตอบ:


185

หากคุณแค่ใช้รูปแบบวานิลลา (ไม่ใช่ 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})

2
ขอบคุณสำหรับform = MyForm(initial={'my_field':True})ฉันไม่พบในเอกสารในทันที
Paco

คำตอบนี้เป็นจริงที่ไม่ถูกต้อง : เริ่มต้นค่าไม่ได้เริ่มต้นค่าดังกล่าวใน @DW คำตอบ
แช่แข็ง

143
from django.db import models

class Foo(models.Model):
    any_field = models.BooleanField(default=True)

1
เอกสารนี้อยู่ที่ไหน มีการกล่าวถึงinitialในเอกสาร (สำหรับรูปแบบที่ไม่ถูกผูกไว้) แต่ไม่ใช่default
ผู้ใช้

7
ในคำตอบนี้ผู้ตอบกำลังใช้ฟิลด์โมเดลไม่ใช่ฟิลด์ฟอร์ม นั่นคือจุดที่แตกต่าง สิ่งนี้ทำให้ฉันสะดุดเพราะฉันข้ามไปเพียงเพื่อดู kwarg เริ่มต้น ค่าเริ่มต้นไม่ใช่แบบฟอร์มที่ถูกต้องแบบฟอร์ม kwarg แค่อยากจะโพสต์เพื่อเคลียร์คำตอบนี้เล็กน้อยเนื่องจากมี 0 ความคิดเห็น
Josh Brown

ใช้ได้เฉพาะกับฟิลด์โมเดลฟอร์มเท่านั้น นอกจากนี้การเปลี่ยนค่าเริ่มต้นของโมเดลเพื่อให้แสดงค่าเริ่มต้นแตกต่างกันเล็กน้อยโดยเฉพาะอย่างยิ่งเมื่อตั้งค่าเริ่มต้นนั้นง่ายมาก
guival

เริ่มต้นมาจาก Django รุ่นเก่า docs.djangoproject.com/th/2.0/ref/models/fields/#booleanfield
Sharpless512

6

ฉันใช้ 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เช่นกัน ขอบคุณ.
ตรึง

0

ใน DJango 3.0 ค่าเริ่มต้นของ BooleanField ใน model.py ถูกตั้งค่าดังนี้:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.