python - Django ha richiesto il campo in forma di modello



3 Answers

Se il campo Modello è vuoto = Vero, quindi richiesto è impostato su False nel campo modulo. Altrimenti, richiesto = Vero

Dice così qui: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

Sembra che tu stia facendo tutto bene. È possibile verificare il valore di self.fields['end'].required .

python django forms model widget

Ho una forma in cui un paio di campi stanno uscendo come richiesto quando non li voglio anche io. Ecco il modulo di models.py

class CircuitForm(ModelForm):
    class Meta:
        model = Circuit
        exclude = ('lastPaged',)
    def __init__(self, *args, **kwargs):
        super(CircuitForm, self).__init__(*args, **kwargs)
        self.fields['begin'].widget = widgets.AdminSplitDateTime()
        self.fields['end'].widget = widgets.AdminSplitDateTime()

Nel modello Circuit corrente, i campi sono definiti in questo modo:

begin = models.DateTimeField('Start Time', null=True, blank=True)
end = models.DateTimeField('Stop Time', null=True, blank=True)

Il mio views.py per questo è qui:

def addCircuitForm(request):
    if request.method == 'POST':
        form = CircuitForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/sla/all')
    form = CircuitForm()    
    return render_to_response('sla/add.html', {'form': form})

Cosa posso fare in modo che i due campi non siano richiesti?




Espandendo la risposta di DataGreed, ho creato un Mixin che ti permette di specificare una variabile fields_required sulla classe Meta questo modo:

class MyForm(RequiredFieldsMixin, ModelForm):

    class Meta:
        model = MyModel
        fields = ['field1', 'field2']
        fields_required = ['field1']

Ecco qui:

class RequiredFieldsMixin():

    def __init__(self, *args, **kwargs):

        super().__init__(*args, **kwargs)

        fields_required = getattr(self.Meta, 'fields_required', None)

        if fields_required:
            for key in self.fields:
                if key not in fields_required:
                    self.fields[key].required = False



Dalla documentazione del campo modello ,

Se hai un modello come mostrato di seguito,

class Article(models.Model):
    headline = models.CharField(
        max_length=200,
        null=True,
        blank=True,
        help_text='Use puns liberally',
    )
    content = models.TextField()

È possibile modificare la convalida del modulo del titolo su required=True invece di blank=False come quella del modello come definizione del campo come mostrato di seguito.

class ArticleForm(ModelForm):
    headline = MyFormField(
        max_length=200,
        required=False,
        help_text='Use puns liberally',
    )

    class Meta:
        model = Article
        fields = ['headline', 'content']

Quindi, rispondendo alla domanda,

class CircuitForm(ModelForm):
    begin = forms.DateTimeField(required=False)
    end = forms.DateTimeField(required=False)
        class Meta:
            model = Circuit
            exclude = ('lastPaged',)

questo fa begin e end a required=False




Related