How to set default values in TabularInline formset in Django admin

If what you need is to define default values for the new forms that are created you can redefine the empty_form property of a InlineFormSet:

class MyDefaultFormSet(django.forms.models.BaseInlineFormSet):
    @property
    def empty_form(self):
       form = super(MyDefaultFormSet, self).empty_form
       # you can access self.instance to get the model parent object
       form.fields['label'].initial = 'first name'
       # ...
       return form

 class DetailsInline(admin.TabularInline):
    formset = MyDefaultFormSet

Now, every time you add a new form it contains the initial data you provided it with. I've tested this on django 1.5.


from django.utils.functional import curry

class DetailsInline(admin.TabularInline):
    model = Details
    formset = DetailsFormset
    extra = 3

    def get_formset(self, request, obj=None, **kwargs):
        initial = []
        if request.method == "GET":
            initial.append({
                'label': 'first name',
            })
        formset = super(DetailsInline, self).get_formset(request, obj, **kwargs)
        formset.__init__ = curry(formset.__init__, initial=initial)
        return formset

From here: Pre-populate an inline FormSet?