Comment faire une boucle sur les choix de champs de formulaire et afficher les champs d'instance de modèle associés
J'ai un ModelForm avec un choix multiple de terrain. Les choix sont peuplées instances de Randonneurs appartenant à un Club.
Je veux personnaliser mon formulaire s'affiche, en affichant le choix dans un tableau où la 1ère colonne contient des cases à cocher, et un peu plus de colonnes à afficher les détails de chaque randonneur. Ainsi, par exemple, les colonnes sont (checboxes, le nom, l'âge, le préféré du sentier de randonnée).
Je ne suis pas sûr de savoir comment aborder cette. Comment puis-je accéder et d'afficher le champ de formulaire de choix avec son associé instance du modèle de champs dans mon template. Quelqu'un sait de Django façon de le faire?
#models.py
class Club(models.Model):
title = models.CharField()
hikers = models.ManyToManyField(Hikers)
class Hiker(models.Model):
name = models.CharField()
age = models.PositiveIntegerField()
favourite_trail = models.CharField()
#forms.py
class ClubForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
club_pk = kwargs['club_pk']
del kwargs['club_pk']
super(ClubForm, self).__init__(*args, **kwargs)
choices = [(ts.pk, ts.name) for hiker in Club.objects.filter(pk=club_pk)]
self.fields['hikers'].choices = choices
class Meta:
model = Club
fields = ('hikers',)
widgets = {'hikers': forms.CheckboxSelectMultiple}
source d'informationauteur sizeight | 2010-12-14
Vous devez vous connecter pour publier un commentaire.
Plus simple si vous définissez l'ensemble de la forme dans un modèle HTML. Vous devriez être en mesure d'effectuer une itération sur les valeurs d'un champ dans un modèle comme ça:
C'est étonnamment difficile, mais vous pouvez le faire en utilisant
ModelMultipleChoiceField
CheckboxSelectMultiple
et un modèle personnalisé de filtre. La forme et le widget classes d'obtenir la plupart du chemin, mais le modèle de filtre fonctionne gadget à vous donner pour chaque instance dans le queryset. Voir ci-dessous...Solution générique
Spécifiques pour vous
Cela devrait fonctionner si vous réglez le formulaire comme suit:
D'essayer cette solution :
voir ce lien : http://www.ilian.io/django-forms-choicefield-and-custom-html-output/
Je pense que vous pouvez définir propre widget de la classe héritée de CheckboxSelectMultiple avec votre propre méthode render() et de personnaliser la sortie html.
Voir le code source, ligne 690
Ça va être réutilisables dans n'importe quel modèle.
Cette réponse fournit un formulaire personnalisé widget -
TableSelectMultiple
- qui sonne comme ce que vous voulez:Il y a aussi le originale de Django Extrait de.
liées billet: https://code.djangoproject.com/ticket/9230
J'ai fait un widget qui rend un tel tableau: http://skyl.org/log/post/skyl/2011/01/wherein-the-inner-workings-of-the-deathstarwidget-are-revealed/
Je suis ici à la recherche d'une meilleure solution encore 😀