我正在使用Django 1.11
我没有得到ModelForm docs所期望的行为......
此外,每个生成的表单字段都具有如下设置的属性:
如果模型字段为空= True,则将required设置为False 表格字段。否则,required = True。
我正在使用ModelForm:
class TestForm(ModelForm):
class Meta:
model = CUser
fields = '__all__'
基础模型:
class CUser(AbstractBaseUser):
...
a_t = models.BooleanField()
但我的表单字段a_t没有required = True设置集。 (我知道我可以在表单中创建该字段以使其工作,但我很好奇为什么这不应该按照我理解的方式工作(
)我错过了什么?
编辑:
我的模型中也有这个:
REQUIRED_FIELDS = ['first_name','last_name']
但the docs也说这不会影响事情......
REQUIRED_FIELDS对Django的其他部分没有影响,比如在管理员中创建用户。
答案 0 :(得分:0)
我从来没有使用BooleanField
。但它适用于IntegerField
就好了。类似的东西:
YESNO_CHOICES = (
(0, 'no'),
(1, 'yes'),
)
a_t = models.IntegerField(default=1, choices=YESNO_CHOICES)
答案 1 :(得分:0)
根据docs forms.BooleanField
默认情况下(空时)返回False
。
另外models.BooleanField
只能True
或False
- 因此默认需要一些值。
UPDATE 我在BooleanField(Django 1.11)的源代码中找到了:
def __init__(self, *args, **kwargs):
kwargs['blank'] = True
super(BooleanField, self).__init__(*args, **kwargs)
我认为这意味着默认情况下 Django为每个blank=True
设置BooleanField
。
更新2 在 Django 2.0 - 1020行看来它甚至已被更改:
def formfield(self, **kwargs):
if self.choices:
include_blank = not (self.has_default() or 'initial' in kwargs)
defaults = {'choices': self.get_choices(include_blank=include_blank)}
else:
form_class = forms.NullBooleanField if self.null else forms.BooleanField
# In HTML checkboxes, 'required' means "must be checked" which is
# different from the choices case ("must select some value").
# required=False allows unchecked checkboxes.
defaults = {'form_class': form_class, 'required': False}
return super().formfield(**{**defaults, **kwargs})
P.S。正如你在评论中看到的那样 - 这正是我所说的,几乎是逐字逐句:D