Opened 10 years ago

Closed 10 years ago

Last modified 7 years ago

#9863 closed (fixed)

InlineModelAdmin breaks in the latest revision 9650

Reported by: shilin Owned by: Keith Bussell
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: no UI/UX: no

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 Keith Bussell 10 years ago.
Stand-alone django test case exhibiting the problem
9683.diff (3.0 KB) - added by Alex Gaynor 10 years ago.
9683.2.diff (3.1 KB) - added by Alex Gaynor 10 years ago.

Download all attachments as: .zip

Change History (13)

comment:1 Changed 10 years ago by shilin

My mistake
The error should be

KeyError at /admin/object/object/add/

'parent'

comment:2 Changed 10 years ago by django_banjo

Component: django.contrib.adminForms

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 10 years ago by (none)

milestone: post-1.0

Milestone post-1.0 deleted

comment:4 Changed 10 years ago by Jacob

milestone: 1.1
Triage Stage: UnreviewedAccepted

comment:5 Changed 10 years ago by Keith Bussell

Owner: changed from nobody to Keith Bussell
Status: newassigned

comment:6 Changed 10 years ago by Keith Bussell

Note to self: something broke in r9297

Changed 10 years ago by Keith Bussell

Attachment: test_9863.diff added

Stand-alone django test case exhibiting the problem

Changed 10 years ago by Alex Gaynor

Attachment: 9683.diff added

comment:7 Changed 10 years ago by Alex Gaynor

Has patch: set

Changed 10 years ago by Alex Gaynor

Attachment: 9683.2.diff added

comment:8 Changed 10 years ago by jkocherhans

Resolution: fixed
Status: assignedclosed

(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 10 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 7 years ago by Jacob

milestone: 1.1

Milestone 1.1 deleted

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