Câu trả lời:
Nếu bạn chỉ đang sử dụng dạng vani (không phải ModelForm), bạn có thể đặt giá trị ban đầu của Trường ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field. ban đầu ) như
class MyForm(forms.Form):
my_field = forms.BooleanField(initial=True)
Nếu đang sử dụng ModelForm, bạn có thể đặt giá trị mặc định trên trường mô hình ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ), giá trị này sẽ áp dụng cho ModelForm kết quả , giống
class MyModel(models.Model):
my_field = models.BooleanField(default=True)
Cuối cùng, nếu bạn muốn tự động chọn trong thời gian chạy cho dù trường của bạn có được chọn theo mặc định hay không, bạn có thể sử dụng tham số ban đầu cho biểu mẫu khi bạn khởi tạo nó :
form = MyForm(initial={'my_field':True})
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
initial
trong tài liệu (đối với hình thức không liên kết), nhưng không phảidefault
Tôi đang sử dụng django == 1.11. Câu trả lời nhận được nhiều phiếu bầu nhất thực sự là sai. Kiểm tra tài liệu từ django, nó cho biết:
ban đầu - Một giá trị để sử dụng trong hiển thị ban đầu của Trường này. Giá trị này không được sử dụng làm dự phòng nếu dữ liệu không được cung cấp.
Và nếu bạn đào sâu vào mã của quy trình xác thực biểu mẫu, bạn sẽ thấy rằng, đối với mỗi trường, biểu mẫu sẽ gọi nó là tiện ích con value_from_datadict
để nhận giá trị thực, vì vậy đây là nơi chúng ta có thể đưa giá trị mặc định vào.
Để làm điều này BooleanField
, chúng ta có thể kế thừa từ CheckboxInput
, ghi đè mặc định value_from_datadict
và init
hàm.
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)
Sau đó sử dụng widget này khi tạo BooleanField
.
class ExampleForm(forms.Form):
bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
Django 3.0
quá. Cảm ơn.
form = MyForm(initial={'my_field':True})
, tôi không tìm thấy nó ngay lập tức trong tài liệu.