Django TextField 始终是必需的,尽管 blank=True,Null=True
Django TextField always is required, despite blank=True,Null=True
尽管有我最良好的祝愿,但似乎总是需要一个字段,我遇到了麻烦。我的 'word_search' 文本字段总是要求输入数据,但我一直在努力确保选项允许留空。
我的模型是这样的。可以看到blank=True,Null=True选项
class IAV(models.Model):
z_score = models.DecimalField(max_digits = 4,decimal_places=4)
screens = models.IntegerField(default=0)
flu_proteins = models.IntegerField(default = 0)
Key_word = models.TextField(blank=True,null=True)
sess = models.ForeignKey(Sess_IAV,default=None)
我的看法是这样的
def new_IAV(request):
if request.method == "POST":
form = IAVForm(request.POST,request.FILES)
if form.is_valid():
sess_ = Sess_IAV.objects.create()
form.save(
for_page=sess_,
z_score = form.cleaned_data("z_score"),
screens = form.cleaned_data("screens"),
flu_proteins = form.cleaned_data("flu_proteins"),
Key_word = form.cleaned_data("key_word"),
)
return redirect(sess_)
else:
print(form.errors)
else:
url=reverse('IAV_home')
return HttpResponseRedirect(url)
我的表格是这样的。你可以看到 required=False 属性。
class IAVForm(forms.models.ModelForm):
z_score = forms.DecimalField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0.0',}))
screens = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0',}))
flu_proteins = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0',}))
key_word = forms.CharField(widget=forms.Textarea(attrs={'class':'form-control','rows':1,'cols':10,'placeholder':'keword values','required':'False'}))
class Meta:
model=IAV
fields=('z_score','screens','flu_proteins','key_word')
def save(self,for_page,z_score,screens,flu_proteins,key_word):
self.instance.sess = for_page
self.instance.z_score = z_score
self.instance.screens = screens
self.instance.flu_proteins = flu_proteins
self.instance.key_word = key_word
return super().save()
考虑到模型有 'blank=True, null=True' 选项,我不确定为什么不允许将此字段留空。
此外,小部件表示不需要它。
试试这个方法。
def __init__(self, *args, **kwargs):
super(IAVForm, self).__init__(*args, **kwargs)
self.fields["key_word"].required = False
我还注意到 key_word
不在您的模型字段中!
试试这个:
class IAVForm(forms.ModelForm):
z_score = forms.DecimalField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0.0',}))
screens = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0',}))
flu_proteins = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0',}))
key_word = forms.CharField(required=False, widget=forms.Textarea(attrs={'class':'form-control','rows':1,'cols':10,'placeholder':'keword values'}))
首先,您只需将 class (forms.ModelForm).
添加到引号内并作为属性。删除引号并将其放在小部件的属性之前。
看看是否可行。
尝试从字段属性中完全删除所需的 属性。 Required="True/False"
无效。如果你想禁用它,你必须完全删除它,per the W3C Specs and this article。
尽管有我最良好的祝愿,但似乎总是需要一个字段,我遇到了麻烦。我的 'word_search' 文本字段总是要求输入数据,但我一直在努力确保选项允许留空。
我的模型是这样的。可以看到blank=True,Null=True选项
class IAV(models.Model):
z_score = models.DecimalField(max_digits = 4,decimal_places=4)
screens = models.IntegerField(default=0)
flu_proteins = models.IntegerField(default = 0)
Key_word = models.TextField(blank=True,null=True)
sess = models.ForeignKey(Sess_IAV,default=None)
我的看法是这样的
def new_IAV(request):
if request.method == "POST":
form = IAVForm(request.POST,request.FILES)
if form.is_valid():
sess_ = Sess_IAV.objects.create()
form.save(
for_page=sess_,
z_score = form.cleaned_data("z_score"),
screens = form.cleaned_data("screens"),
flu_proteins = form.cleaned_data("flu_proteins"),
Key_word = form.cleaned_data("key_word"),
)
return redirect(sess_)
else:
print(form.errors)
else:
url=reverse('IAV_home')
return HttpResponseRedirect(url)
我的表格是这样的。你可以看到 required=False 属性。
class IAVForm(forms.models.ModelForm):
z_score = forms.DecimalField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0.0',}))
screens = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0',}))
flu_proteins = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0',}))
key_word = forms.CharField(widget=forms.Textarea(attrs={'class':'form-control','rows':1,'cols':10,'placeholder':'keword values','required':'False'}))
class Meta:
model=IAV
fields=('z_score','screens','flu_proteins','key_word')
def save(self,for_page,z_score,screens,flu_proteins,key_word):
self.instance.sess = for_page
self.instance.z_score = z_score
self.instance.screens = screens
self.instance.flu_proteins = flu_proteins
self.instance.key_word = key_word
return super().save()
考虑到模型有 'blank=True, null=True' 选项,我不确定为什么不允许将此字段留空。
此外,小部件表示不需要它。
试试这个方法。
def __init__(self, *args, **kwargs):
super(IAVForm, self).__init__(*args, **kwargs)
self.fields["key_word"].required = False
我还注意到 key_word
不在您的模型字段中!
试试这个:
class IAVForm(forms.ModelForm):
z_score = forms.DecimalField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0.0',}))
screens = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0',}))
flu_proteins = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'form-control','value':'0',}))
key_word = forms.CharField(required=False, widget=forms.Textarea(attrs={'class':'form-control','rows':1,'cols':10,'placeholder':'keword values'}))
首先,您只需将 class (forms.ModelForm).
添加到引号内并作为属性。删除引号并将其放在小部件的属性之前。
看看是否可行。
尝试从字段属性中完全删除所需的 属性。 Required="True/False"
无效。如果你想禁用它,你必须完全删除它,per the W3C Specs and this article。