/ / BooleanField predvolená hodnota nie je nastavená pri vytváraní inštancie modelu - django, django-models, django-admin

Predvolená hodnota BooleanField nie je nastavená pri vytváraní inštancie modelu - django, django-models, django-admin

Pri vytváraní inštancie modelu s BooleanField my_boolean_field s default nastavený na True, Mám chybu:

my_boolean_field is required

Nemali by byť nastavené na predvolenú hodnotu?

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)

odpovede:

3 pre odpoveď č. 1

Zmeňte definíciu poľa vo formulári modelu a špecifikujte require=False.

class MyModelCreationForm(UserCreationForm):

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

class Meta:
model = User

Poznámka k BooleanField referencie

Poznámka Pretože všetky podtriedy poľa majúrequired = True v predvolenom nastavení je podmienka validácie tu dôležitá. Ak chcete do formulára zahrnúť boolean, ktorý môže byť buď pravdivý alebo nepravdivý (napr. Zaškrtnuté alebo nezaškrtnuté políčko), musíte pri vytváraní BooleanField zapamätať povinný = False.