/ / Wartość domyślna BooleanField nie jest ustawiona podczas tworzenia instancji modelu - django, django-models, django-admin

Wartość domyślna BooleanField nie jest ustawiona podczas tworzenia instancji modelu - django, django-models, django-admin

Podczas tworzenia instancji modelu o wartości BooleanField my_boolean_field z a default Ustawić True, Pojawia się błąd:

my_boolean_field is required

Czy nie powinno być ustawione na wartość domyślną?

models.py

class MyModel(User):

my_boolean_field = models.BooleanField(default=False)

admin.py

class MyModelCreationForm(UserCreationForm):

my_boolean_field = forms.BooleanField(initial=False)

class Meta:
model = User

class MyModelChangeForm(UserChangeForm):

my_boolean_field = forms.BooleanField(initial=False)

class Meta:
model = User


class MyModelAdmin(UserAdmin):

form = MyModelChangeForm
add_form = MyModelCreationForm

list_filter = ()
list_display = ("username", "my_boolean_field")

fieldsets = (
(None, {"fields": ("username", "my_boolean_field", "password" )}),
)


add_fieldsets = (
(None, {
"classes": ("wide",),
"fields": ("username", "my_boolean_field", "password1", "password2")}
),
)

def get_form(self, request, obj=None, **kwargs):
form = super(MyModelAdmin, self).get_form(request, obj, **kwargs)
if obj==None:
form.base_fields["username"].widget.attrs["autocomplete"] = "off"
form.base_fields["password1"].widget.attrs["autocomplete"] = "off"
form.base_fields["password2"].widget.attrs["autocomplete"] = "off"
return form

samsic_site.register(MyModel, MyModelAdmin)

Odpowiedzi:

3 dla odpowiedzi № 1

Zmień definicję pola w formularzu modelu, aby określić require=False.

class MyModelCreationForm(UserCreationForm):

my_boolean_field = forms.BooleanField(initial=False, required=False)

class Meta:
model = User

Uwaga na BooleanField odniesienie

Uwaga Ponieważ wszystkie podklasy Field mająrequired = True domyślnie tutaj ważny jest warunek sprawdzania poprawności. Jeśli chcesz uwzględnić w formularzu wartość boolowską, która może mieć wartość True lub False (np. Zaznaczone lub niezaznaczone), musisz pamiętać o konieczności podania = Fałsz podczas tworzenia pola BooleanField.