python forms - Django ha richiesto il campo in forma di modello





regexfield decimalfield (6)


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

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?




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 .







Non è una risposta, ma per chiunque altro trovi questo tramite Google, un altro bit di dati: questo mi sta accadendo su un modello di modulo con un DateField. È richiesto impostato su False, il modello ha "null = True, blank = True" e il campo nel modulo mostra required = False se lo guardo durante il metodo clean (), ma sta ancora dicendo che ho bisogno di una data valida formato. Non sto usando alcun widget speciale e ricevo il messaggio "Inserire una data valida" anche quando imposto in modo esplicito input_formats = ['% Y-% m-% d', '% m /% d /% Y', ' % m /% d /% y ',' '] nel campo modulo.

EDIT: Non so se aiuterà qualcun altro, ma ho risolto il problema che stavo avendo. Il nostro modulo ha del testo predefinito nel campo (in questo caso, la parola "a" per indicare che il campo è la data di fine, il campo è chiamato "end_time"). Stavo specificatamente cercando la parola "to" nel metodo clean () della form (avevo anche provato il metodo clean_end_time (), ma non è mai stato chiamato) e impostando il valore della variabile clean_data su None come suggerito in questo Django biglietto . Tuttavia, non importa quanto (suppongo) la convalida del modello avesse già vomitato sul formato data non valido di "a" senza darmi la possibilità di intercettarlo.




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




self.parent è un riferimento alla finestra attuale, quindi self.root.title dovrebbe essere self.parent.title e self.root non dovrebbe esistere.







python django forms model widget