2010-08-06 9 views
2

Je dois offrir un service dans lequel un utilisateur peut gérer l'autorisation associée à un groupe. Je voudrais utiliser la fonction forms.ModelForm qui vient de django, mais je ne peux pas comprendre comment modifier le jeu de requête sur lequel le champ cyclique. J'ai aussi jeté un coup d'oeil profond dans contrib.admin et contrib.auth pour découvrir où ces formes sont générées mais ne peuvent pas le trouver.Formulaire personnalisé pour l'autorisation de groupe avec Queryset filtré

J'essaie de ne pas utiliser un modelForm normal afin que les paramètres précédents soient déjà définis.

Ceci est le scénario. J'ai ajouté 40 (plus ou moins) autorisations à mon projet, tous les nom de code commence par, donc je voudrais le faire « XXXXX. »:

class PermissionGroup(forms.ModelForm): 
#permissions = forms.ModelMultipleChoiceField(queryset = Permission.objects.filter(codename__startswith = 'xxxxx.'), widget=forms.CheckboxSelectMultiple) 
class Meta: 
    model = Group 
    fields = ('permissions',) 

Comment puis-je obtenir le résultat? Ou comment puis-je lier l'autorisation précédente à un formulaire normal.ModelForm?

Merci d'avance!

Répondre

5
class PermissionGroup(forms.ModelForm): 
    permissions = forms.ModelMultipleChoiceField(Permission.objects.none(), widget=forms.CheckboxSelectMultiple) 

    def __init__(self, pass_a_Q_object=None, *args, **kwargs): 
     super(PermissionGroup, self).__init__(*args, **kwargs) 
     if pass_a_Q_object: 
      self.fields['permissions'].queryset = Permission.objects.filter(pass_a_Q_object)