[Python] Django ha richiesto il campo in forma di modello


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 .

Question

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?




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




Espandendo la risposta di DataGreed, ho creato un Mixin che consente 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