2009-03-13 8 views
0
class MyUserAdminForm(forms.ModelForm): 
class Meta: 
    model = Users 

group = forms.ModelMultipleChoiceField(
    queryset=Groups.objects.filter(domain__user=3), 
    widget=forms.CheckboxSelectMultiple, 
) 

class UserAdmin(admin.ModelAdmin): 

list_display = ('login', 'company', 'userType') 
form = MyUserAdminForm 
filter_horizontal = ('group',) 


admin.site.register(Users, UserAdmin) 

J'utilise MyUserAdminForm pour personnaliser l'interface d'administration. Je passer le pk de la table d'utilisateur comme argument pour le filtreUtilisation de ModelForm et transmission d'arguments

queryset=Groups.objects.filter(domain__user=3) 

je passe pk de la table d'utilisateur au lieu du disque codé « 3 ». Vous voulez savoir comment cela peut être réalisé?

Répondre

1

L'objet en cours de modification est donné au constructeur du formulaire dans l'argument instance. Vous devriez pouvoir l'utiliser pour filtrer les choix de groupe:

class MyUserAdminForm(forms.ModelForm): 
    class Meta: 
     model = Users 

    group = forms.ModelMultipleChoiceField(
      queryset=Groups.objects.all(), 
      widget=forms.CheckboxSelectMultiple, 
    ) 

    def __init__(self, *args, **kwargs): 
     super(MyUserAdminForm, self).__init__(*args, **kwargs) 
     if kwargs.has_key('instance'): 
      qs = Group.objects.filter(domain__user=kwargs['instance'].pk) 
      self.fields['group'].queryset = qs