2009-03-13 6 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) 

私は管理インターフェイスをカスタマイズするためにMyUserAdminFormを使用しています。私が代わりにハードコードされた「3」のユーザーテーブルのPKを渡す必要があり、フィルタに引数としてModelFormを使用して引数を渡す

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

をUserテーブルのPKを渡す必要があります。 これがどのように達成されるのか知りたいですか?

答えて

1

編集中のオブジェクトは、instance引数のフォームのコンストラクタに渡されます。これを使用してグループの選択肢をフィルタすることができます。

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 
関連する問題