#33111: Conditionally changing ModelAdmin inlines based on object's field breaks
saving object in admin site when new inlines should appear
-----------------------------------------+------------------------
               Reporter:  joeli          |          Owner:  nobody
                   Type:  Bug            |         Status:  new
              Component:  contrib.admin  |        Version:  3.2
               Severity:  Normal         |       Keywords:
           Triage Stage:  Unreviewed     |      Has patch:  0
    Needs documentation:  0              |    Needs tests:  0
Patch needs improvement:  0              |  Easy pickings:  0
                  UI/UX:  0              |
-----------------------------------------+------------------------
 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.
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33111>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.6109b94301e84a649527fc9c43222e5d%40djangoproject.com.

Reply via email to