django: बूलियनफिल्ड, डिफ़ॉल्ट मान को सही पर कैसे सेट करें?


107

मैं django में BooleanField का उपयोग कर रहा हूं। डिफ़ॉल्ट रूप से इसके द्वारा उत्पन्न चेकबॉक्स अनियंत्रित स्थिति है, मैं चाहता हूं कि राज्य डिफ़ॉल्ट रूप से चेक किया जाए, यह कैसे करना है?

जवाबों:


184

यदि आप केवल एक वेनिला फ़ॉर्म (एक मॉडलफ़ॉर्म नहीं) का उपयोग कर रहे हैं, तो आप फ़ील्ड प्रारंभिक मान ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field ) सेट कर सकते हैं । प्रारंभिक ) की तरह

class MyForm(forms.Form):
    my_field = forms.BooleanField(initial=True)

यदि आप एक मॉडलफ़ॉर्म का उपयोग कर रहे हैं, तो आप मॉडल फ़ील्ड ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ) पर एक डिफ़ॉल्ट मान सेट कर सकते हैं , जो परिणामस्वरूप मॉडल मॉडल पर लागू होगा , पसंद

class MyModel(models.Model):
    my_field = models.BooleanField(default=True)

अंत में, यदि आप गतिशील रूप से रनटाइम का चयन करना चाहते हैं या नहीं तो आपका क्षेत्र डिफ़ॉल्ट रूप से चुना जाएगा या नहीं, आप प्रारंभिक पैरामीटर का उपयोग उस फॉर्म के लिए कर सकते हैं जब आप इसे आरंभ करते हैं :

form = MyForm(initial={'my_field':True})

2
के लिए धन्यवाद form = MyForm(initial={'my_field':True}), मैं इसे सीधे प्रलेखन में नहीं मिला।
पाको

यह उत्तर वास्तव में गलत है : प्रारंभिक मान डिफ़ॉल्ट मान नहीं है जैसा कि @DW उत्तर
फ्रीज

142
from django.db import models

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

1
यह कहां प्रलेखित है? initialडॉक्स (अनबाउंड फॉर्म के लिए) में उल्लेख है , लेकिन नहींdefault
उपयोगकर्ता

7
इस उत्तर में, उत्तरदाता फ़ील्ड फ़ील्ड का उपयोग कर रहा है, न कि फ़ॉर्म फ़ील्ड का। बस यहीं अंतर है। इसने मुझे उलझा दिया क्योंकि मैं डिफ़ॉल्ट कागज़ को देखने के लिए इस पर छोड़ दिया था। डिफ़ॉल्ट एक वैध फ़ॉर्म नहीं है .orm kwarg। बस पोस्ट करना चाहता था कि इस उत्तर को थोड़ा साफ़ करें, क्योंकि इसमें 0 कमेंट्री है।
जोश ब्राउन

यह केवल फॉर्म मॉडल फील्ड के लिए काम करता है। इसके अलावा, मॉडल को केवल प्रारंभिक रूप से प्रदर्शित करने के लिए डिफ़ॉल्ट रूप से बदलना थोड़ा अधिक है, विशेष रूप से प्रारंभिक मूल्य निर्धारित करते समय यह बहुत सरल है।
--17।

प्रारंभिक पुराने Django से है। docs.djangoproject.com/en/2.0/ref/models/fields/#booleanfield
Sharpless512

6

मैं django == 1.11 का उपयोग कर रहा हूं। जवाब सबसे अधिक वोट वास्तव में गलत है। Django से दस्तावेज़ की जाँच करना, यह कहता है:

प्रारंभिक - इस फ़ील्ड के प्रारंभिक प्रदर्शन में उपयोग करने के लिए एक मूल्य। यदि डेटा नहीं दिया जाता है तो इस मान का उपयोग फ़ॉलबैक के रूप में नहीं किया जाता है।

और यदि आप फ़ॉर्म सत्यापन प्रक्रिया के कोड में खोदते हैं, तो आप पाएंगे कि प्रत्येक फ़ील्ड के लिए, फॉर्म इसे विजेट का नाम देगा 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

डीजेंगो 3.0 में मॉडलफ्रेम में एक बूलियनफिल्ड का डिफ़ॉल्ट मान इस तरह सेट किया गया है:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.