Usando ModelForm e passando argumentos

votos
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)

Eu estou usando MyUserAdminForm para personalizar a interface de administração. Eu tenho que passar o pk da tabela de usuário como o argumento para o filtro

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

Eu deveria passar o pk da tabela de usuário em vez do disco codificado '3'. Queria saber como isso pode ser alcançado?

Publicado 13/03/2009 em 23:13
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

O objeto que está sendo editado é dado para o construtor do formulário no instanceargumento. Você deve ser capaz de usar isso para filtrar as escolhas do grupo:

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
Respondeu 14/03/2009 em 15:46
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more