﻿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
33111	Conditionally changing ModelAdmin inlines based on object's field breaks when changing object and new inlines should appear.	joeli	Hasan Ramezani	"Minimal example:

{{{
#!python

# models.py
class Parent(models.Model):
    show_inlines = models.BooleanField(default=False)

class Child(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE)


# admin.py
class ChildInline(admin.StackedInline):
    model = Child

@admin.register(Parent)
class ParentAdmin(admin.ModelAdmin):
    def get_inlines(self, request, obj):
        if obj is not None and obj.show_inlines:
            return [ChildInline]
        return []
}}}

- Create `Parent` objects in either initial state and it works as you'd expect, where `ChildInline` is rendered when `show_inlines` is True.
- When `show_inlines` is True, you can also set it to False from the admin site, and the `ChildInline` disappears as expected.
- But when `show_inlines` is False, you cannot re-enable it. Saving the object fails due to a validation error in the new `ChildInline` that didn't exist before saving:

{{{
(Hidden field TOTAL_FORMS) This field is required.
(Hidden field INITIAL_FORMS) This field is required.
ManagementForm data is missing or has been tampered with. Missing fields: child_set-TOTAL_FORMS, child_set-INITIAL_FORMS. You may need to file a bug report if the issue persists.
}}}"	Bug	closed	contrib.admin	3.2	Normal	fixed		Hasan Ramezani WeizhongTu	Ready for checkin	1	0	0	0	0	0
