2010-10-24 5 views
2

J'ai cherché et essayer d'obtenir que cela fonctionne depuis quelques heures et je ne peux pasdjango ModelMultipleChoiceField (valeurs par défaut)

J'ai une liste des compétences que je prends de la base de données:

forms.ModelMultipleChoiceField(
           skills.objects.all(), 
           required=True, 
           widget=forms.CheckboxSelectMultiple(), 
           label='Check your skills.', 
           initial=skill_list.objects.filter(user='void'), 
          ) 

mais cela ne fonctionne pas car je m'attendrais à ce qu'il fonctionne. Je veux essentiellement afficher la liste des compétences (toutes) et celles que l'utilisateur a vérifiées pour qu'elles soient vérifiées ... pff Je ne peux même pas m'expliquer correctement.

Une fois que l'utilisateur a coché la case à cocher et qu'il a saisi une autre page, je souhaite afficher toutes les compétences et celle que l'utilisateur a cochée.

Disons que je abc et les contrôles utilisateur b et frappe en soumettre lorsque la page w/e Je veux afficher a uncheked b vérifié c sans contrôle.

PS: Si je skills.objects.all(), je reçois dans le code HTML value 1 et comment puis-je faire comme ceci:

skills = (
     ('a', 'a'), 
     ('b', 'b'), 
     ) 

Au lieu de ('1', 'a'), ('2', 'b').

Répondre

2

Vos questions sont un peu floues, mais j'essaie toujours de mon mieux.

Tout d'abord,

Je veux afficher toutes les compétences et l'un l'utilisateur vérifié à vérifier ...

Le formulaire doesnot avoir accès à l'utilisateur, de sorte que vous devez passer c'est l'utilisateur. Vous pouvez le faire en surchargeant la méthode __init__ comme ceci:

def __init__(self, **kwargs): 
     current_user = kwargs.pop ('user') 
     super(FormName, self).__init__(attrs) 

alors pour définir les valeurs choisies au départ,

self.fields['skills'].initial = skill_list.objects.filter(user='void') 

Rappelez-vous que vous devez faire après avoir appelé le constructeur de la classe de base.

Enfin,

PS: si j'utilise skills.objects.all() Je obtenir la valeur html 1 et comment puis-je faire cela comme

compétences = ( ('a', 'a'), ('b', 'b'), )

au lieu de ('1', 'a'), ('2', 'b')

Pourquoi voudriez-vous faire cela? Les chiffres sont les clés primaires des lignes de votre table 'skills'. Django l'utilise pour configurer les relations appropriées.

+0

Pourquoi ferais-je cela? tout d'abord merci pour votre réponse ...après que l'utilisateur soumet ce formulaire je veux avoir la valeur a au lieu de 1 parce que je ne veux pas interroger la DB pour ce que 1 est et basé sur ce que je fais ... Je ne sais pas si c'est la bonne façon, je pourrais utiliser la clé primaire mais je suis paresseux: D thx à nouveau pour votre réponse :) – void

Questions connexes