Django:即使在表单细分上为true = blank,也必须填写

时间:2018-11-21 04:16:04

标签: html django

我有一个表格,其中的字段“ instrucciones”应该是可选的才能完成。我试图在模型中对其进行修改,并将其作为空白字段设置为null,甚至使用默认值('')。

instrucciones = models.CharField(max_length = 200,blank = True,null = True,default ='')

但是,在提交时,我要求填写此字段。为什么?

enter image description here

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>

1 个答案:

答案 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