Opened 7 years ago

Closed 6 years ago

Last modified 4 years ago

#9863 closed (fixed)

InlineModelAdmin breaks in the latest revision 9650

Reported by: shilin Owned by: keithb
Component: Forms Version: master
Severity: Keywords: admin
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description

I've defined two models like this:

class Parent(models.Model):    
    name = models.CharField(max_length = 128, db_index = True)    

class Child(models.Model):    
    parent = models.ForeignKey(Parent, related_name = 'child_set', editable = False)
    name = models.CharField(max_length = 30, blank = True)    

And in admin.py, I tried to edit the Child object related to the certain Parent object.

class ChildInline(admin.StackedInline):
    model = Child
    extra = 10

class ParentAdmin(admin.ModelAdmin):    
    inlines = [
       ChildInline,     
    ]

site.register(Parent, ParentAdmin)

However, the admin application shows something like below:

KeyError at /admin/object/object/add/

'object'

The line of code which throws the exception is

C:\Python24\lib\site-packages\django\forms\models.py in add_fields

 487. return save_instance(form, new_obj, exclude=[self._pk_field.name], commit=commit)
 488.
 489. def add_fields(self, form, index):
 490. super(BaseInlineFormSet, self).add_fields(form, index)
 491. if self._pk_field == self.fk:
 492. form.fields[self._pk_field.name] = InlineForeignKeyField(self.instance, pk_field=True)
 493. else:

 >>>This Line>>> 494. form.fields[self.fk.name] = InlineForeignKeyField(self.instance, label=form.fields[self.fk.name].label) ...

I've tried to revert my Django to revision 9160, the same model and admin settings do not throw the same exception. It's like that the foreignkey field leads to this error.
But I'm quite confused about it.

Attachments (3)

test_9863.diff (3.6 KB) - added by keithb 6 years ago.
Stand-alone django test case exhibiting the problem
9683.diff (3.0 KB) - added by Alex 6 years ago.
9683.2.diff (3.1 KB) - added by Alex 6 years ago.

Download all attachments as: .zip

Change History (13)

comment:1 Changed 7 years ago by shilin

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

My mistake
The error should be

KeyError at /admin/object/object/add/

'parent'

comment:2 Changed 7 years ago by django_banjo

  • Component changed from django.contrib.admin to Forms

This error also happens with inlineformset_factory() if a model's field has editable=False or if it's used with formset = MyFormSet(... exclude=('some_field')).

comment:3 Changed 6 years ago by anonymous

  • milestone post-1.0 deleted

Milestone post-1.0 deleted

comment:4 Changed 6 years ago by jacob

  • milestone set to 1.1
  • Triage Stage changed from Unreviewed to Accepted

comment:5 Changed 6 years ago by keithb

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

comment:6 Changed 6 years ago by keithb

Note to self: something broke in r9297

Changed 6 years ago by keithb

Stand-alone django test case exhibiting the problem

Changed 6 years ago by Alex

comment:7 Changed 6 years ago by Alex

  • Has patch set

Changed 6 years ago by Alex

comment:8 Changed 6 years ago by jkocherhans

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

(In [10239]) Fixed #9863. A ForeignKey with editable=False to the parent in an inline no longer raises an exception. Thanks to keithb for the test case and Alex Gaynor for the patch.

comment:9 Changed 6 years ago by jkocherhans

(In [10287]) [1.0.X] Fixed #9863. A ForeignKey with editable=False to the parent in an inline no longer raises an exception. Thanks to keithb for the test case and Alex Gaynor for the patch. Backport of r10239 from trunk.

comment:10 Changed 4 years ago by jacob

  • milestone 1.1 deleted

Milestone 1.1 deleted

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