创建模型实例时未设置BooleanField默认值

时间:2013-06-06 06:36:02

标签: django django-models django-admin

在创建BooleanField my_boolean_fielddefault设置为True的模型实例时,出现错误:

my_boolean_field is required

不应该设置为默认值吗?

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)

1 个答案:

答案 0 :(得分:3)

在模型表单中更改字段定义以指定require=False

class MyModelCreationForm(UserCreationForm):   

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

    class Meta:
        model = User

关于BooleanField reference

的说明
  

请注意   由于默认情况下所有Field子类都必须为= True,因此此处的验证条件很重要。如果要在表单中包含一个可以为True或False的布尔值(例如,选中或未选中复选框),则必须记住在创建BooleanField时传入required = False。