ho alcuni campi necessari nel mio ModelForm django. Come posso aggiungere una stella rossa (*) dopo i campi richiesti?Come aggiungere una 'stella *' dopo un django ModelForm CharField?
risposta
ho intenzione di assumere si vuole che questo accada automaticamente, quindi ecco uno dei pochi modi diversi:
{% for field in form %}
<label for="{{ field.auto_id }}">{{ field.label_tag }}
{% if field.field.required %}
<span class="required">*</span>
{% endif %}
</label>
{% endfor %}
Quindi è possibile lo stile l'asterisco usando i CSS.
In alternativa, è possibile aggiungere l'asterisco usando i CSS, invece, se si desidera:
<style type="text/css">
span.required:after { content: '*'; }
</style>
{% for field in form %}
<label for="{{ field.auto_id }}">
{% if field.field.required %}
<span class="required">{{ field.label_tag }}</span>
{% else %}
{{ field.label_tag }}
{% endif %}
</label>
{% endfor %}
Questa è probabilmente una scelta migliore se si vuole fare altre cose con il campo richiesto pure.
Tuttavia, se non sarà di accesso a campi singolarmente (come l'utilizzo di {{form.as_p}}), quindi è possibile aggiungere una proprietà alla ModelForm:
class FooForm(forms.ModelForm):
required_css_class = 'required'
che definirà tutti i campi che sono richiesti come aventi la classe 'richiesta' (e quindi, puoi usare il codice CSS di cui sopra per aggiungere un asterisco (o qualsiasi altra cosa tu voglia fare)
Puoi anche usare jQuery
in ordine per selezionare l'etichetta o aggiungerla
per esempio, se si dispone di questo modulo bootstrap
<form class="form-horizontal">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" required="required">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3">
</div>
</div>
</form>
Poi, se si desidera aggiungere la stella per i campi obbligatori.
$('input,textarea,select').filter('[required]').parent().parent().find("label").append("*");
Inoltre si consiglia di specificare una classe per i campi obbligatori etichette in modo è possibile farli in grassetto o qualcosa
$('input,textarea,select').filter('[required]:visible').parent().parent().find("label").addClass("required_label");
sto usando {{}} form.as_p nel mio modello e ho non posso accedere ai campi obbligatori nel modo in cui hai scritto C'è un modo per personalizzare un blocco html dopo alcuni campi in ModelForm? – Kozet
@Kozet: {{form.as_p}} va bene se sei felice dell'HTML che genera, ma se vuoi modificarlo devi scrivere il tuo modulo HTML con ogni campo individualmente. –
@ Kozet: modificato la mia risposta per la vostra situazione. – JoeLinux