Comment définir la classe css d'une étiquette dans une déclaration de formulaire django?
Je suis en utilisant django-uniforme et à l'utilisation de certains uniformes de fonctionnalités, je suis à la recherche d'un moyen d'ajouter de la classe css directement à partir du formulaire de déclaration (pour les indépendants widgets).
(comme un bonus, voici mon réutilisables en lecture seule à la maison fait mixin extrait...)
from django import forms
def _get_cleaner(form, field):
def clean_field():
return getattr(form.instance, field, None)
return clean_field
class UniformROMixin(forms.BaseForm):
"""
UniformROMixin, inherits to turn some fields read only
- read_only = list of field names.
"""
def __init__(self, *args, **kwargs):
super(UniformROMixin, self).__init__(*args, **kwargs)
if hasattr(self, "read_only"):
if self.instance and self.instance.pk:
for field in self.read_only:
self.fields[field].widget.attrs['readonly'] = True
self.fields[field].widget.attrs['class'] += "readOnly"
# here I would like to set css class of the label
# created from the self.fields[field].label string
setattr(self, "clean_" + field, _get_cleaner(self, field))
Mon seul moyen pour l'instant est d'ajouter un peu de javascript sur mon formulaire générique de modèle et ajouter des classes à la main.
Tout brillant comme idée?
source d'informationauteur christophe31
Vous devez vous connecter pour publier un commentaire.
Widgets ont un
attrs
argument mot-clé que prendre undict
qui peut définir des attributs pour l'élément d'entrée qu'il rend. Les formes ont aussi certains attributs que vous pouvez définir pour modifier la façon dont Django affiche votre formulaire. Prenons l'exemple suivant:Cela fonctionne sur n'importe quel
Widget
classe. Malheureusement, il n'y a pas un moyen facile de changer la façon dont Django rend les étiquettes si vous venez de le faire{{ field }}
. Heureusement, vous jouez avec la forme de l'objet un peu dans le modèle:Là encore, vous pouvez toujours ajouter arbitraire des attributs de l'objet sur lequel vous travaillez:
Rendre votre modèle avec la forme en contexte, et dans le modèle, vous pouvez le faire:
Ce qui convient à votre fantaisie.
J'ai trouvé cet extrait de code qui pourrait être une bonne réponse:
Comment ajouter de la classe css et "*" pour les champs requis étiquettes
ici une adaptation à mes besoins (pas encore testé, je vais modifier le post une fois fait):
Si vous avez une meilleure solution à ne pas le tordre tous les BoundField classe je suis toujours à l'écoute.
edit:
peut être lié à django de façon uniforme pour gérer champ obligatoire mais il semble ne pas appeler
readonly_cssclass_adder
. Mais j'ai trouvé un autre et plus simple solution, mon readOnly widget activé automatiquement en lecture seule ctrlHolderCet ajout est mon préféré de réponse pour l'instant:
edit 2: L'autre manière de choisir à la fin de l'été pour "contourner" le
uni_form/field.html
modèle qui n'appelez pas BoundField.label_tag. Donc j'ai vérifié ici domaine de l'état.Légèrement personnalisée option basée sur @xj9 solution utilisée avec ManyToMany champ et Bootstrap
.checkbox-inline
. Fonctionne comme le bouton radio avec.radio-inline
.form.py
template.html