django: BooleanField, làm thế nào để đặt giá trị mặc định thành true?


107

Tôi đang sử dụng BooleanField trong django. Theo mặc định hộp kiểm do nó tạo ra là trạng thái không được chọn, tôi muốn trạng thái được kiểm tra theo mặc định thì phải làm thế nào?

Câu trả lời:


184

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})

2
Cảm ơn vì 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.
Paco

Câu trả lời này thực sự sai : giá trị ban đầu không phải là giá trị mặc định như được đề cập trong câu trả lời
đóng băng

142
from django.db import models

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

1
Tài liệu này ở đâu? Có đề cập đến initialtrong tài liệu (đối với hình thức không liên kết), nhưng không phảidefault
người dùng

7
trong câu trả lời này, người trả lời đang sử dụng trường mô hình, không phải trường biểu mẫu. Đó là nơi có sự khác biệt. Điều này khiến tôi vấp phải bởi vì tôi đã bỏ qua nó chỉ để xem kwarg mặc định. Mặc định không phải là một biểu mẫu hợp lệ. Chỉ muốn đăng nó để làm rõ câu trả lời này lên một chút, vì nó có 0 bình luận cho nó.
Josh Brown

Điều này chỉ hoạt động cho các trường mô hình biểu mẫu. Ngoài ra, việc thay đổi mặc định của mô hình chỉ để hiển thị giá trị ban đầu hơi khác một chút, đặc biệt khi thiết lập giá trị ban đầu rất đơn giản.
guival


6

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_datadictinithà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)

Có giá trị cho Django 3.0quá. Cảm ơn.
đóng băng

0

Trong DJango 3.0, giá trị mặc định của BooleanField trong model.py được đặt như sau:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.