﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
15820	inline admin formset uses incorrect form	shanyu	nobody	"I have the (somewhat simplified) following code:

{{{
def create_foo_form(baz):
    class FooForm(forms.ModelForm):
       def __init__(self, *args, **kwargs):
           print ""Initializing a FooForm object""
           # Init stuff here
    return FooForm

class FooInline(admin.TabularInline):
    model = Foo

    def get_formset(self, request, obj=None, **kwargs):
        if obj:
            kwargs['form'] = create_foo_form(obj)
        return super(FooInline, self).get_formset(request, obj, **kwargs)

class BazAdmin(admin.ModelAdmin):
    inlines = [FooInline,]
}}}

The problem is that the inline formset always uses my custom FooForm, though the code above clearly chooses it only if obj is not None (Otherwise the default self.form should be used).

The following code is get_fieldsets method of InlineModelAdmin.

{{{
    def get_fieldsets(self, request, obj=None):
        if self.declared_fieldsets:
            return self.declared_fieldsets
        form = self.get_formset(request).form
        fields = form.base_fields.keys() + list(self.get_readonly_fields(request, obj))
        return [(None, {'fields': fields})]
}}}

The line ""form = self.get_formset(request).form"" calls get_formset method without providing the argument ""obj"". That results in using an incorrect form in this case. I guess the correct form would be ""form = self.get_formset(request, obj).form"".
"	Bug	closed	contrib.admin	1.2	Normal	fixed	inlinemodeladmin, inlines		Ready for checkin	1	0	0	0	0	0
