9
votes

Django: Comment vérifier si le widget de champ est cochez la case dans le modèle?

J'ai créé un modèle personnalisé pour les champs de formulaire de rendu:

<tr class="{{field.field.widget.attrs.class}}">
    <th class="label">
        <label for="{{field.auto_id}}">
            {{field.label}}
            {% if not field.field.required %}<span class="optional">(optional)</span>{% endif %}
        </label>
    </th>
    <td class="field">
        {{field}}
        {% if field.errors %}<label class="error" for="{{field.auto_id}}">{{field.errors.0}}</label>{% endif %}
        {% if field.help_text %}<small class="help-text">{{field.help_text}}</small>{% endif %}
    </td>
</tr>


5 commentaires

Bonjour - Y a-t-il une raison particulière pour laquelle vous devez le faire dans le modèle, plutôt que de définir un widget personnalisé dans la classe de formulaire?


@stevejalim: Je peux créer un widget personnalisé, mais cela ne résout pas le problème. Je veux mettre Colspan = 2 et avoir l'étiquette sur le côté droit. C'est un problème avec la manière dont la rangée de table est aménagée et non avec la manière dont le widget est rendu.


je t'ai eu. Un moyen (Hacky) de le faire est de passer dans une liste de champs connus pour être des cases à cocher et chaque fois que vous rendantez le champ, vérifiez si son nom est dans cette liste, et si oui, définissez votre colscan. Icky, cependant; o)


Très icky. J'essaie de nettoyer tout ce qui va maintenant, pas en ajouter plus :)


Question similaire: Stackoverflow.com/questions/1809874/...


3 Réponses :


10
votes

{{champ.field.widget.input_type}} vous obtiendra cette information pour beaucoup de widgets, mais pas tous. Je ne sais pas si cela fonctionnera pour le widget de la case à cocher par défaut ou non. Vaut un coup.


1 commentaires

Ne pense pas que CocherBoxInput a cet attribut ... il semble avoir un attribut check_test ... Je ne sais pas si c'est unique à la case à cocher Entrée ... mais ça marche pour l'instant ... peu d'un piratage cependant.



18
votes

Utilisez un filtre de modèle personnalisé!

in YourApp / templatetags / my_custom_tags.py code>: p> xxx pré>

dans votre modèle: p>

>>> form django.forms import CheckboxInput
KeyboardInterrupt
>>> CheckboxInput.__class__.__name__
'MediaDefiningClass'


2 commentaires

Et aujourd'hui, il y a une application spéciale django utilitaire qui a un checker similaire et une autre chose: pypi.python.org/pypi/django-form-utils#is-checkbox


Je dirais que c'est plus propre d'utiliser quelque chose comme ceci: retour Isinstance (champ.field.widget, case à la case) .



7
votes

Il est un peu tardif, mais j'ai mis en place quelque chose de similaire à ce qui se fait dans l'administrateur de Django.

premier, j'ai ajouté un nouvel attribut is_checkbox code> à la classe de champ: p >

{% if field.field.is_checkbox %}
    {{ field }} {{ field.label_tag }}
{% else %}
    {{ field.label }} {{ field }}
{% endif %}


0 commentaires