我有一个表格,其中的字段“ instrucciones”应该是可选的才能完成。我试图在模型中对其进行修改,并将其作为空白字段设置为null,甚至使用默认值('')。
instrucciones = models.CharField(max_length = 200,blank = True,null = True,default ='')
但是,在提交时,我要求填写此字段。为什么?
models.py:
class TamaniosCantidades(models.Model):
TAMANIOS = (('2x2', '2" x 2"',), ('3x3', '3" x 3"',),
('4x4', '4" x 4"',), ('5x5', '5" x 5"',))
CANTIDADES = (('50', '50',), ('100', '100',),
('150', '150',))
# usuario = models.ForeignKey(User, on_delete=models.DO_NOTHING)
tamanios = models.CharField(max_length=10, choices=TAMANIOS)
cantidades = models.CharField(max_length=10, choices=CANTIDADES)
imagenes = models.FileField(upload_to='imagenes/', null=True)
instrucciones = models.CharField(max_length=200, blank=True, null=True, default='')
# uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.tamanios
forms.py
# Declare Forms
class StepOneForm(forms.Form):
tamanios = forms.ChoiceField(choices=TAMANIOS, widget=forms.RadioSelect(), label='Selecciona un tamaño')
cantidades = forms.ChoiceField(choices=CANTIDADES, widget=forms.RadioSelect(), label='Selecciona la cantidad')
class StepThreeForm(forms.ModelForm):
instrucciones = forms.CharField(widget=forms.Textarea)
class Meta:
model = TamaniosCantidades
fields = ('imagenes', 'instrucciones')
html:
{%csrf_token%}
<div class="form-group">
{{ form.imagenes|as_crispy_field }}
<div id="instrucciones-adicionales" style="display: none">
<p class="bold-font"> Instrucciones adicionales (opcional):</p>
{{ form.instrucciones|as_crispy_field }}
</div>
</div>
</br>
</br>
<p>O, sáltate este paso y envía tu arte por correo electrónico</p>
<button type="submit" class="btn btn-naranja text-white btn-block">Continuar
</button>
</form>
答案 0 :(得分:1)
尝试将其添加到类Meta以下的表单中:
def __init__(self, *args, **kwargs):
super(StepThreeForm, self).__init__(*args, **kwargs)
self.fields['instrucciones'].required = False
您还可以使用此方法向您的字段添加其他属性:
def __init__(self, *args, **kwargs):
super(StepThreeForm, self).__init__(*args, **kwargs)
self.fields['instrucciones'].required = False
self.fields['instrucciones'].label = 'Instrucciones'
self.fields['instructions'].help_text = 'Give instructions.'
您甚至可以使用它来获取您的表单请求:
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super(StepThreeForm, self).__init__(*args, **kwargs)
但是您还必须将请求传递给视图:
def get_form_kwargs(self):
kwargs = super(ViewName, self).get_form_kwargs()
kwargs['request'] = self.request
return kwargs