Opened 5 years ago

Closed 5 years ago

Last modified 4 years ago

#12561 closed (fixed)

The ``can_delete`` argument of ``generic_inlineformset_factory`` isn't working

Reported by: Piaume Owned by: nessita
Component: contrib.admin Version: 1.1
Severity: Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description (last modified by russellm)

When the can_delete argument of generic_inlineformset_factory is set to False, a "Delete" checkbox is always displayed on the admin site.

Here a short example:

class SomeModel(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

class SomeInlineFormset(generic.GenericStackedInline):
    model = SomeModel
    formset = generic.generic_inlineformset_factory(SomeModel, can_delete=False)
    extra = 0

class SomeModelAdmin(admin.ModelAdmin):
    inlines = [SomeInlineFormset]

http://img8.imageshack.us/img8/3323/screenshotbe.png

Attachments (3)

django_cantdelete_bug.png (38.8 KB) - added by Piaume 5 years ago.
Bug result on the admin site (there is a "Delete" checkbox)
patch-12561.diff (2.8 KB) - added by nessita 5 years ago.
patch-12561-1.diff (5.2 KB) - added by nessita 5 years ago.
Improved the tests. Added default values on parent class for can_delete and can_order. Ran the whole test suite, all green.

Download all attachments as: .zip

Change History (11)

Changed 5 years ago by Piaume

Bug result on the admin site (there is a "Delete" checkbox)

comment:1 Changed 5 years ago by Piaume

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Summary changed from The ``cant_delete`` argument of ``generic_inlineformset_factory`` isn't working to The ``can_delete`` argument of ``generic_inlineformset_factory`` isn't working

comment:2 Changed 5 years ago by russellm

  • Component changed from Contrib apps to django.contrib.admin
  • Description modified (diff)
  • milestone set to 1.2
  • Triage Stage changed from Unreviewed to Accepted

It's probably not the reason for your original report, but the admin UI merge seems to have completely broken Generic inline formsets. I can't get them to work at all, with or without can_delete.

comment:3 Changed 5 years ago by nessita

  • Owner changed from nobody to nessita
  • Status changed from new to assigned

comment:4 Changed 5 years ago by nessita

Submitting patch to have InlineModelAdmin.get_formset passing can_delete and can_order to inlineformset_factory.

Tests are also included, but not for can_order. I couldn't find a way to test it, since the admin GUI looks the same when can_order is either True or False. Ideas are welcomed!

Changed 5 years ago by nessita

Changed 5 years ago by nessita

Improved the tests. Added default values on parent class for can_delete and can_order. Ran the whole test suite, all green.

comment:5 Changed 5 years ago by nessita

  • Has patch set

comment:6 Changed 5 years ago by jkocherhans

  • Resolution set to fixed
  • Status changed from assigned to closed

(In [12533]) Fixed #12561. InlineAdmin now respects can_delete=False. Thanks, nessita.

comment:7 Changed 5 years ago by jkocherhans

(In [12534]) [1.1.X] Fixed #12561. InlineAdmin now respects can_delete=False. Backport of [12533] from trunk.

comment:8 Changed 4 years ago by jacob

  • milestone 1.2 deleted

Milestone 1.2 deleted

Note: See TracTickets for help on using tickets.
Back to Top